为什么总是 return "None" 字符串,就像我的 if 语句总是错误的?

Why always return "None" string, like my if statment was always false?

我学习 JS 的第二种方法。

也许有人会告诉我为什么我总是得到 "none"。

感谢您的帮助。

const reverseFactorial = (num) => {
  for (let i = 1; num > 1; num = num / ++i) {  
    if (num === 1) return `${i}`
  }
      
  return 'None'
};
       
console.log(reverseFactorial(120))

检查你的if条件和for循环条件。num>i是你的for循环条件所以当i=1在for循环中它会立即退出for循环而不是进入if条件所以你如果条件永远不会满足,这就是为什么你总是得到 none。 所以将 for 循环条件更改为

num>=1;

这是一个工作演示

代码段

const reverseFactorial = (num) => {
  for (let i = 1; num >= 1; num = num / ++i) { // condition updated to "num >= 1"
    if (num === 1) return `${i}`
  }
  return 'None'
};

console.log('reverseFactorial(120) gives: ', reverseFactorial(120))

当然也可以使用三元运算符执行此操作,您必须更改内部 'if' 检查并赋值给一个临时变量(我们称之为 'result'),这将是在每次迭代时保留临时结果,直到满足 num 等于 1 (num === 1) 条件或 num 不再大于或等于 1 (num >= 1);到那时,for 循环将结束,结果将与关联的 'reversefactorial' 值或 'None' 值一起返回:

    const reverseFactorial = (num) => {
        // this avoids exceptions if num < 1 as you always return a valid value
        // by returning zero, the function is reporting an invalid num argument
        result = 0 
        for (let i = 1; num >= 1; num = num / ++i) { // condition updated to "num >= 1"
            result = (num === 1) ? `${i}` : 'None'
        }
        return result
    };

    console.log('reverseFactorial(120) gives: ', reverseFactorial(120))

你也可以像这样把所有东西都去掉来加速循环:

    const reverseFactorial = (num) => {
        // take into account num < 1
        if (num < 1) {
            i = 0;
            num = 1;
        }
        else i = 1;
        for (;num >= 1; num = num / ++i) { // condition updated to "num >= 1"
            if (num === 1) break;
        }
        return (num === 1) ? `${i}` : 'None'
    };

    console.log('reverseFactorial(120) gives: ', reverseFactorial(120))

不过,如您所见,现在考虑带有起始 if 的无效 num 条目以正确设置 i 的初始值变得更加麻烦;无论如何,这个函数应该比前一个函数更快,因为我们正在将分配从循环中取出,所以 num 越高。