繁体   English   中英

抛出TypeError的array.push()方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM