我尝试使用underscore.js each
函数将数组的每个元素就地推送到现有数组。
为此,我假设我可以使用push
数组方法,而不是通常传递给each
的匿名函数我将一个上下文对象作为第三个参数传递给each
:
> var a = [1,2,3]
> var b = []
> _.each(a, b.push, b)
我希望b
现在为[1,2,3]
,但实际上是:
Array [ 1, 0, Array[3], 2, 1, Array[3], 3, 2, Array[3] ]
发生了什么事?
答案 0 :(得分:0)
_.each
与foreach
的工作方式不同。如documentation中所述,
每次使用三个参数调用iteratee:(element, 索引,列表)
如果您改为使用console
方法,则可以看到:
> _.each(a, console.log, console)
1 0 Array [ 1, 2, 3 ]
2 1 Array [ 1, 2, 3 ]
3 2 Array [ 1, 2, 3 ]
所以push
最终会接受这九个值,而不是三个人可能希望的那个。可以使用匿名函数:
_.each(a, function(x) { b.push(x) })
然后和b
按预期[1,2,3]
。
或者,在这种特殊情况下,使用extend an array in JavaScript的其他方法之一。