Javascript array.push()方法引发TypeError

Javascript array.push()方法引发TypeError,javascript,arrays,Javascript,Arrays,我正在尝试使用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(

我正在尝试使用
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不是一个函数

即使提供累加器
'a'
以减少为空数组。

该方法返回数组的长度,而您返回的是长度。因此在下一次迭代中,
a
将是一个数字(
1
),而不是数组

要使其工作,您需要返回数组引用

function arrayMap(arr, fn) {
    return arr.reduce(function(a, elem) {
        a.push(fn(elem));
        return  a;
    }, []);
}
函数数组映射(arr,fn){
返回arr.reduce(函数(a,元素){
a、 推(fn(elem));
返回a;
}, []);
}
设x=arrayMap([1,2,3],函数(elem){
返回元素*2;
});
控制台日志(x)该方法返回数组的长度,您将返回长度。因此在下一次迭代中,
a
将是一个数字(
1
),而不是数组

要使其工作,您需要返回数组引用

function arrayMap(arr, fn) {
    return arr.reduce(function(a, elem) {
        a.push(fn(elem));
        return  a;
    }, []);
}
函数数组映射(arr,fn){
返回arr.reduce(函数(a,元素){
a、 推(fn(elem));
返回a;
}, []);
}
设x=arrayMap([1,2,3],函数(elem){
返回元素*2;
});
控制台日志(x)请改用

改用


您可以使用参数
currentIndex
,其中的参数是数组中正在处理的当前元素的索引。如果提供了初始值,则从索引0开始,否则从索引1开始

函数数组映射(arr,fn){
返回arr.reduce(函数(a、元素、当前索引){
a[currentIndex]=fn(elem);
返回a;
}, []);
}
设x=arrayMap([1,2,3],函数(elem){
返回元素*2;
});

控制台日志(x)
您可以使用参数
currentIndex
,该参数是数组中正在处理的当前元素的索引。如果提供了初始值,则从索引0开始,否则从索引1开始

函数数组映射(arr,fn){
返回arr.reduce(函数(a、元素、当前索引){
a[currentIndex]=fn(elem);
返回a;
}, []);
}
设x=arrayMap([1,2,3],函数(elem){
返回元素*2;
});

控制台日志(x)这对于
reduce
来说并不是一个很好的用例,因为您的“累加器”从头到尾都是一样的。当你注意到你迷失在无用的复杂性中。在我看来,使用
forEach
会更干净。对于
reduce
,这并不是一个很好的用例,因为您的“累加器”从头到尾都是一样的。当你注意到你迷失在无用的复杂性中。在我看来,使用forEach
会更干净。