【发布时间】:2016-05-27 15:46:37
【问题描述】:
为什么当我想在reduce函数中使用push函数返回一个新数组时出现错误。但是,当我在 reduce 函数中使用 concat 方法时,它返回一个新数组没有问题。
我要做的就是将一个数组传递给 reduce 函数并返回相同的数组。
var store = [0,1,2,3,4];
var stored = store.reduce(function(pV,cV,cI){
console.log("pv: ", pV);
return pV.push(cV);
},[]);
这会返回一个错误。但是当我使用 concat 时:
var store = [0,1,2,3,4];
var stored = store.reduce(function(pV,cV,cI){
console.log("pv: ", pV);
return pV.concat(cV);
},[]);
它返回相同的数组。
有什么想法吗?
【问题讨论】:
-
return PV.push表示在下一次迭代中,PV 将是一个数字,而不是一个数组,因为 push 返回数组的长度 - 如果你愿意,你可以这样做return pV.push(cV), pV;- 不过,有除了少了 1 行代码(即pV.push(cV); return pV;)之外没有任何好处 -
如果您只想“复制”数组...
var stored = store.slice();就可以了 -
@Andy 想详细说明一下吗? docs literally 状态
map calls a provided callback function once for each element in an array, in order, and constructs a new array from the results似乎完美地描述了提问者在做什么。 -
@Andy - 你可以用鞋跟把钉子钉在墙上 - 但通常我们更喜欢正确的工具来完成正确的工作!阅读这两种方法的文档,或者只是阅读下面的答案。
-
@Andy - 要将钉子钉在墙上,您需要的是锤子,而不是鞋子(同样适用)
标签: javascript arrays reduce