使用 .reduce() 对数字进行因式分解
Factorializing a number with .reduce()
我正在尝试编写一个函数来生成所提供整数的阶乘,然后减少阶乘数组(通过乘以每个数组元素)。
例如:
因子(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);
但是,它一直返回 undefined。
我认为这与函数的格式有关,但我不确定。
尝试将 initial value
传递给 reduce,
array.reduce(function(a, b) {
return a * b;
},1);
还有 return array
与 function
、
的减少值
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));
你的问题是你的函数实际上 return 没有任何值,而这样一个函数的 "return" 值是 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()的函数中标记了returns的那个return,但是有没有 return来自 factor().
.reduce()
不是 return 预期结果所必需的。尝试使用单个 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));
我正在尝试编写一个函数来生成所提供整数的阶乘,然后减少阶乘数组(通过乘以每个数组元素)。
例如:
因子(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);
但是,它一直返回 undefined。
我认为这与函数的格式有关,但我不确定。
尝试将 initial value
传递给 reduce,
array.reduce(function(a, b) {
return a * b;
},1);
还有 return array
与 function
、
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));
你的问题是你的函数实际上 return 没有任何值,而这样一个函数的 "return" 值是 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()的函数中标记了returns的那个return,但是有没有 return来自 factor().
.reduce()
不是 return 预期结果所必需的。尝试使用单个 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));