在一个数字序列中,如何计算一个数字出现的次数,该数字的值恰好比前一个数字的值小一个?

尼纳科布

代码:

function OneDecremented(num) { 
  num = num.toString()
  var count = 0

  for(i = 1; i < num.length; i++) {
    if(num[i - 1] - num[i] === 1){
      count++
    }
  }
  return count

}
console.log(OneDecremented(9876541110))

所以我很难理解两件事:

  1. i 和 num[i] 有什么区别
  2. 我不明白 if 语句中的计算是如何发生的,有人可以分解它吗?

抱歉,如果这些问题听起来太傻了,我是 JS 新手,无法真正理解算术计算。谢谢你的时间。

安德里亚·贾马奇

由于几个原因,该代码编写得不好,但最重要的是,它在i全局范围内泄漏了引用,因此,让我们从一个更好的版本开始:

function OneDecremented(num) {
  var str = num.toString();
  var count = 0;
  for(var i = 1; i < str.length; i++) {
    if(str[i - 1] - str[i] === 1)
      count++;
  }
  return count;
}

字符串,在现代 JS 中,可以像数组一样访问,索引返回index位置处的字符

if(str[i - 1] - str[i] === 1)
// is the same as
if ((str.charAt(i - 1) - str.charAt(i)) === 1)

一旦检索到每个字符,代码就会进行隐式的“字符到数字”转换,这要归功于-运算符,但如果它是一个+,它就会将两个字符连接为字符串(所以,要小心)。

明确总是更好,但如果你知道如何-工作,它就可以完成这项任务。

循环从 开始1,并检查i - 1在第一次迭代中索引处的字符0减去当前字符后的字符是1,这意味着当前字符比前一个字符少一个

在这种情况下,计数器会累加。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章