[英]Javascript .reduce()
I am doing freeCodeCamp JavaScript.我正在做 freeCodeCamp JavaScript。 I am on the question: Basic Algorithm Scripting: Factorialize a NumberPassed我的问题是:基本算法脚本:分解一个 NumberPassed
Here is the code I have written:这是我写的代码:
function factorialize(num) {
let arr = [];
let reducer = (accumulator, currentValue) => accumulator * currentValue;
for (let i = 1; i < num + 1; i++) {
let newArr = arr.push(i);
}
return newArr.reduce(reducer);
}
factorialize(5);
Here is my problem: the console says this:这是我的问题:控制台说:
ReferenceError: newArr is not defined ReferenceError: newArr 未定义
Why is it saying that newArr
is not defined?为什么说newArr
没有定义? I DID define it!我确实定义了它! I am relatively new to coding and I really want to learn.我对编码比较陌生,我真的很想学习。 Please help me.请帮我。
You don't need newArr
at all.你根本不需要newArr
。
Array.prototype.push
returns length of the array. Array.prototype.push
返回数组的长度。
You cannot get a variable declared with let
in for statement and that caused an error.您无法获得使用let
in for 语句声明的变量并导致错误。
function factorialize(num) { let arr = []; let reducer = (accumulator, currentValue) => accumulator * currentValue; for (let i = 1; i < num + 1; i++) { arr.push(i); } return arr.reduce(reducer); } console.log(factorialize(5));
you can simply do that你可以简单地做到这一点
const factorialize=num=>Array(num).fill(1).reduce((a,_,i)=>a*++i) console.log('5! ->', factorialize(5) ) console.log('3! ->', factorialize(3) )
You can use recursion instead of reduce if you want to:如果你想,你可以使用递归而不是减少:
function factorialize(num) {
while (num > 1) {
return num * factorialize(num - 1);
}
return num;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.