不太确定我哪里出错了,期望通过将 5 变成 [1,2,3,4,5] 的字符串来对 5 (1*2*3*4*5 = 120) 进行因式分解,并且然后使用 reduce 将字符串全部相乘。当我运行代码时,它只会给我 [1,2,3,4,5]...
var arr = [];
function factorialize(num) {
for (var i = 1; i <= num; i++) {
arr.push(i);
}
return arr;
}
var factors = 0;
factors = arr.reduce(function(previousVal, currentVal) {
return previousVal * currentVal;
}, 0); // Expecting 120, instead result = [1,2,3,4,5]
factorialize(5);
请原谅这条漫长的路——我第一周的 Javascript!
最佳答案
arr
为空,应该先给它因式分解的结果数组,并且应该乘而不是加,并且乘时起始值为1而不是0:
var arr = [];
function factorialize(num) {
for (var i = 1; i <= num; i++) {
arr.push(i);
}
return arr;
}
arr = factorialize(5); // give it the value
var factors = arr.reduce(function(previousVal, currentVal) {
return previousVal * currentVal; // multiply, don't add
}, 1); // start with 1 when multiplying
console.log(arr);
console.log(factors);
如果您只想计算阶乘:
function factorial(num) {
var res = 1;
for (var i = 2; i <= num; i++) {
res *= i;
}
return res;
}
console.log('factorial(5) = ' + factorial(5));
console.log('factorial(10) = ' + factorial(10));
关于Javascript 减少功能后不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49431623/