简体   繁体   English

Javascript .reduce()

[英]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.请帮我。

  1. You don't need newArr at all.你根本不需要newArr

  2. Array.prototype.push returns length of the array. Array.prototype.push返回数组的长度。

  3. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM