[英]Array.push throwing TypeError for array.push is not a function
[英]array.push() method throwing TypeError
我正在尝试使用array.map()
实现array.map()
array.reduce()
。 这是我到目前为止的内容:
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不是函数
即使将累加器'a'
设置为减少为空数组。
Array#push
方法返回数组的长度,而您正在返回长度。 因此,在下一次迭代中, a
将是number( 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);
请改用Array.concat() 。
function arrayMap(arr, fn) {
return arr.reduce(function(a, elem) {
return a.concat(fn(elem));
}, []);
}
let x = arrayMap([1, 2, 3], function(elem) {
return elem * 2;
});
console.log(x); // [2, 4, 6]
您可以使用Array.prototype.reduce()的参数currentIndex
,它是数组中正在处理的当前元素的索引。 如果提供了initialValue,则从索引0开始,否则,从索引1开始。
function arrayMap(arr, fn) { return arr.reduce(function(a, elem, currentIndex) { a[currentIndex] = fn(elem); return a; }, []); } let x = arrayMap([1, 2, 3], function(elem) { return elem * 2; }); console.log(x);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.