调用对象方法的每个(_.each)下划线

时间:2015-02-25 11:38:27

标签: javascript underscore.js

我尝试使用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] ]

发生了什么事?

1 个答案:

答案 0 :(得分:0)

在许多其他函数式编程语言或库中,

_.eachforeach的工作方式不同。如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的其他方法之一。