Javascript.reduce()

Javascript.reduce(),javascript,arrays,function,Javascript,Arrays,Function,我正在做freeCodeCamp JavaScript。我的问题是:基本算法脚本:将一个数字进行因式分解 以下是我编写的代码: function factorialize(num) { let arr = []; let reducer = (accumulator, currentValue) => accumulator * currentValue; for (let i = 1; i < num + 1; i++) { let newArr = arr.p

我正在做freeCodeCamp JavaScript。我的问题是:基本算法脚本:将一个数字进行因式分解

以下是我编写的代码:

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);

函数因式分解(num){
设arr=[];
让减速器=(累加器,currentValue)=>累加器*currentValue;
for(设i=1;i
这是我的问题:控制台说:

ReferenceError:未定义newArr

为什么说没有定义
newArr
?我确实给它下了定义!我对编码比较陌生,我真的很想学习。请帮帮我

  • 您根本不需要
    newArr

  • Array.prototype.push
    返回数组的长度

  • 您无法在for语句中使用
    let
    声明变量,这会导致错误

  • 函数因式分解(num){
    设arr=[];
    让减速器=(累加器,currentValue)=>累加器*currentValue;
    for(设i=1;i
    
  • 您根本不需要
    newArr

  • Array.prototype.push
    返回数组的长度

  • 您无法在for语句中使用
    let
    声明变量,这会导致错误

  • 函数因式分解(num){
    设arr=[];
    让减速器=(累加器,currentValue)=>累加器*currentValue;
    for(设i=1;i您可以简单地做到这一点

    const factorialize=num=>Array(num).fill(1).reduce((a,u,i)=>a*++i)
    console.log('5!->',因子化(5))
    log('3!->',factorialize(3))
    您可以简单地执行此操作

    const factorialize=num=>Array(num).fill(1).reduce((a,u,i)=>a*++i)
    console.log('5!->',因子化(5))
    
    console.log('3!->',factorialize(3))
    如果您想:

    function factorialize(num) {
       while (num  > 1) {
         return num * factorialize(num - 1);
            }
        return num;
      }
    

    如果您想:

    function factorialize(num) {
       while (num  > 1) {
         return num * factorialize(num - 1);
            }
        return num;
      }
    

    push(…)
    不返回新数组,它返回数组的新长度。您应该只执行
    返回arr.reduce(reducer)
    。旁注,
    let
    使变量块具有作用域,因此即使
    push()
    返回了您认为只有在for循环的代码块中才能访问的
    newArr
    也会创建变量,但它只存在于for循环中,它是a)不断被覆盖的,b)存储新长度的
    arr
    ,因为这就是
    .push()
    返回的内容。此外,您可以使用它:
    让arr=newarray(num).fill(0).map((元素,索引)=>index+1)
    生成自然数数组。
    push(…)
    不返回新数组,它返回数组的新长度。您应该只执行
    返回arr.reduce(reducer)
    。旁注,
    let
    使变量块具有作用域,因此即使
    push()
    返回了您认为只有在for循环的代码块中才能访问的
    newArr
    也会创建变量,但它只存在于for循环中,它是a)不断被覆盖的,b)存储新长度的
    arr
    ,因为这就是
    .push()
    返回的内容。此外,您可以使用它:
    让arr=newarray(num).fill(0).map((元素,索引)=>index+1)
    生成
    num
    自然数数组。将“您无法获取变量”更改为“您无法获取
    let
    ”。将“您无法获取变量”更改为“您无法获取
    let
    ”。如果您想简明扼要,为什么不创建
    新数组(num)
    [num]
    ?@StackSlave这不是同一件事,第一个表示数组大小,第二个仅使用单个元素生成数组哦,是的。。。间隔。如果你想简明扼要,为什么不制作
    新数组(num)
    [num]
    ?@StackSlave这不是一回事,第一个表示数组大小,第二个只制作一个元素数组哦,是的。。。间隔开,谢谢!这是我关于stackOverflow的第一个问题。你们都帮了大忙!非常感谢。这是我关于stackOverflow的第一个问题。你们都帮了大忙!