我正在尝试使用 array.reduce()
实现 array.map()
。这是我到目前为止所拥有的:
function arrayMap(arr, fn) {
return arr.reduce(function(a, elem) {
return a.push(fn(elem));
}, []);
}
let x = arrayMap([1, 2, 3], function(elem) {
return elem * 2;
});
console.log(x);
但是口译员给我:
TypeError: a.push is not a function
即使累加器 'a'
被提供为 reduce 为空数组。
最佳答案
Array#push
方法返回数组的长度,而您正在返回长度。因此在下一次迭代中,a
将是一个数字 (1
) 而不是数组。
要使其正常工作,您需要返回数组引用。
function arrayMap(arr, fn) {
return arr.reduce(function(a, elem) {
a.push(fn(elem));
return a;
}, []);
}
function arrayMap(arr, fn) {
return arr.reduce(function(a, elem) {
a.push(fn(elem));
return a;
}, []);
}
let x = arrayMap([1, 2, 3], function(elem) {
return elem * 2;
});
console.log(x);
实际上,Array#reduce
使它变得过于复杂的方法是使用 Array#map
是一个更好的主意。方法代替。
function arrayMap(arr, fn) {
return arr.map(fn);
}
function arrayMap(arr, fn) {
return arr.map(fn);
}
let x = arrayMap([1, 2, 3], function(elem) {
return elem * 2;
});
console.log(x);
关于javascript - array.push() 方法抛出 TypeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41226490/