使用 .reduce() 对数字进行阶乘化

Factorializing a number with .reduce()

本文关键字:阶乘 数字 reduce 使用      更新时间:2023-09-26

我正在尝试编写一个函数,该函数将产生提供的整数的阶乘,然后减少阶乘数组(通过乘以每个数组元素)。

例如:

因子(5)>>> [1, 2, 3, 4, 5]>>> 1 * 2 * 3 * 4 * 5>>> 120

var array = [ ];
function factor(num) {
  for (i = 1; i <= num; i++) {
    array.push(i);
  }  
  array.reduce(function(a, b) {
    return a * b;
  })
};
factor(5);

但是,它一直返回未定义。

我认为这与函数的格式有关,但我不确定。

尝试通过 reduce 的initial value

array.reduce(function(a, b) {
    return a * b;
},1);

还返回functionarray的缩减值,

function factor(num) {
  for (i = 1; i <= num; i++) {
    array.push(i);
  }  
  return array.reduce(function(a, b) {
    return a * b;
  },1)
};
console.log(factor(5));

您的问题,即您的函数实际上并没有返回任何值,并且此类函数的"返回"值undefined。让我们看看为什么会发生这种情况:

function factor(num) {
    for (i = 1; i <= num; i++) {
        array.push(i);
    }   
    array.reduce(function(a, b) {
        return a * b; // <-- Here is probably your misunderstanding
    });
};

我标记的返回返回来自您传递给 reduce() 的函数,但没有来自 factor() 的返回。

.reduce() 不需要

返回预期的结果。尝试使用单for循环

var array = [];
function factor(num) { 
  for (var i = 1, res = 1; i < num; array[i - 1] = i, res *= ++i);
  return res
};
console.log(
  factor(3)
, factor(4)
, factor(5)
, factor(6)
, array
)

使用数组索引,如果有人不想用有序数字填充他们的数组,则减少。

num = 10;
Array(num).fill(null).reduce((acc, val, i) => {
    if (i == 0) {
        return 1;
    }
    return acc * (i + 1);
}, 1)

function factor(num) {
  return Array(num)
    .fill(null)
    .map((item, index) => index + 1)
    .reduce((pv, cv) => pv * cv);
}
console.log(factor(3), factor(4), factor(5), factor(6));