为什么总是 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 越高。
我学习 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 越高。