我已经尝试了很多方法来使父参数对reduce的回调函数可见但我必须遗漏一些东西......
// Static
var y = [0, 1, 2, 3, 4, 5, 6, 7].reduce(
function(arr, x){
arr.push(Math.pow(2, x));
return arr},[]);
console.log(y);
// Dynamic
var lambda = function(arr, func) {
return (function(f) { return arr.reduce(function(a, x) {
a.push(f(x));
return a;
}, [])})(func);
}
var y = lambda([0, 1, 2, 3, 4, 5, 6, 7],function(x){return Math.pow(x);});
console.log(y);
输出:
[1, 2, 4, 8, 16, 32, 64, 128]
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN]
答案 0 :(得分:1)
不要忘记Math.pow
中的第一个参数:
// ------------------------------------------------------------v
lambda([0, 1, 2, 3, 4, 5, 6, 7], function(x) { return Math.pow(2, x); });
答案 1 :(得分:1)
您缺少Math.pow
的其中一个参数。您可能想要像这样调用lambda
var y = lambda([0, 1, 2, 3, 4, 5, 6, 7], function(x) {
return Math.pow(2, x);
});
此外,您不必将lambda
构造与IIFE复杂化。它可以简单地
var lambda = function(arr, func) {
return arr.reduce(function(a, x) {
a.push(func(x));
return a;
}, []);
}
修改:正如您在评论中建议的那样,您可以使用Array.prototype.map
,就像这样
console.log(arr.map(function(x) {
return Math.pow(2, x);
}));