以下代码就是我想要实现的目标:
var arr = [{
name: 'foo',
amount: 2
}, {
name: 'foo',
amount: 4
}, {
name: 'foo',
amount: 6
}, {
name: 'foo',
amount: 1
}, {
name: 'foo',
amount: 5
}, ];
var newArr = arr.reduce(function (a, b) {
return a.push(b.amount);
}, []);
console.log(newArr); // which I'd expect to be [2, 4, 6, 1, 5]
但是这个错误:Uncaught TypeError: Object 1 has no method 'push'
。我知道我可以使用.forEach()
执行此操作,但我想知道是否可以使用.reduce()
答案 0 :(得分:3)
您需要map
,而不是reduce
:
amounts = arr.map(function(x) { return x.amount })
如果你想要reduce
,它会是这样的:
var newArr = arr.reduce(function (a, b) {
a.push(b.amount);
return a;
}, []);
reduce
回调应该返回累加器对象。
答案 1 :(得分:0)
那里有一组对象。所以当然对象不知道只能应用于数组的函数push。 即使这些是数组,它也无法工作,因为push会返回数组的新长度。您应该使用map而不是reduce来实现您想要做的事情。