if语句未运行for循环的代码大战持续性Bugger问题

https://www.codewars.com/kata/persistent-bugger/train/javascript 我正在研究JavaScript Code Wars Persistent Bugger问题。如代码所示,我的if语句似乎完全忽略了其中的for循环。

在for循环中记录的所有内容均不会显示,并且在for循环之外记录的所有内容均与for循环中没有记录的内容相同。我曾尝试研究if语句中for循环的使用以及此Code Wars问题的现有解决方案,但没有看到我的问题被复制。根据我的理解,if语句应该从上到下贯穿其中的所有内容。

const persistence = (num) => {
    if (typeof(num) === 'number') {
        let count = 0
        let mult = num
        let newMult = 1
        let stop = false
        while (stop === false){
            if (mult >= 10) {
                for (let i = 0; i < mult.length; i++) {
                    newMult = newMult * mult[i]
                    // // doesn't log anything. code isn't running through for loop?
                    // console.log(newMult)        
                }
                // // logs initial num of 999
                // console.log(mult)
                // // logs initial newMult of 1
                // console.log(newMult)
                count++
                mult = newMult
                newMult = 1
            }
            else {
                stop = true
            }
        }
        return count
    }
}
// logs 1,should be 4
console.log(persistence(999))

我认为我的逻辑是正确的,但是关于if语句和for循环的工作方式,也许我缺少一些基本问题。我注意到有很多更简单的方法可以解决此问题,但是如果我能收到有关为什么我的特定代码不起作用以及如何对其进行调整的反馈,将不胜感激。

milu_yaya 回答:if语句未运行for循环的代码大战持续性Bugger问题

您正在for循环上迭代到num的长度。由于num是数字类型,因此没有长度。

,

您需要遍历mult string 版本(我们将其称为multStr),以便以数字形式访问其数字索引属性。 (否则,它将没有length,并且访问其数字属性不会有任何回报。)

您还可以通过提前返回而不是使用此类嵌套块来显着清理代码:

const persistence = (num) => {
  if (typeof num !== 'number') {
    return;
  }
  let count = 0
  let mult = num
  while (true) {
    if (mult < 10) {
      return count;
    }
    const multStr = String(mult); // <--------------------------
    let newMult = 1
    for (let i = 0; i < multStr.length; i++) { // <--------------------------
      newMult = newMult * multStr[i] // <--------------------------
    }
    mult = newMult;
    count++
  }
}
console.log(persistence(999))

您还可以考虑使用reduce来计算newMult

const persistence = (num) => {
  if (typeof num !== 'number') {
    return;
  }
  let count = 0
  let mult = num
  while (true) {
    if (mult < 10) {
      return count;
    }
    mult = [...String(mult)].reduce((a,b) => a * b,1);
    count++
  }
}
console.log(persistence(999))

本文链接:https://www.f2er.com/3147082.html

大家都在问