是否可以在Javascript中链接array.push()?

时间:2011-08-19 00:13:55

标签: javascript

我有3个独立的数组,我希望将它们全部加载到一个数组中。我可以将.push()个数组用于一个吗?这样的事情可能吗?

 var activeMembers=[];      // Active Users
 var noactiveMsg=[];        // Non-Active Users with a Pending Message
 var noactiveNomsg=[];      // Non-Active Users without a Pending Message
 var chatCenterMembers=[];          // Final Array of Chat Center Members


 chatCenterMembers.push(activeMembers).push(noactiveMsg).push(noactiveNomsg);

有没有办法链接.push()?

6 个答案:

答案 0 :(得分:24)

您正在寻找(vanilla)JavaScript方法Array.concat()

  

返回一个由此数组组成的新数组,该数组与其他数组和/或值连接。

示例,关注您的代码:

chatCenterMembers = chatCenterMembers
    .concat(activeMembers)
    .concat(noactiveMsg)
    .concat(noactiveNomsg);

答案 1 :(得分:7)

chatCenterMembers.push(activeMembers,noactiveMsg,noactiveNomsg)

答案 2 :(得分:2)

您可以使用.concat()代替。

var chatCenterMembers=[];
chatCenterMembers = chatCenterMembers.concat(activeMembers, noactiveMsg, noactiveNomsg);

答案 3 :(得分:1)

因为其他人发布了它:

var chatCenterMembers = activeMembers.concat(noactiveMsg, noactiveNomsg);

答案 4 :(得分:1)

这个问题很混乱。首先,问题似乎是要求一种方法将多个数组合并为一个包含所有数组元素的单个数组。但是,接受的答案提供了创建数组数组的解决方案。由于问题中的文本建议将多个数组的元素合并到一个数组中,而代码示例使用push将数组作为参数,因此OP需要的是相当暧昧的。

此外,有几个答案建议使用concat。虽然这满足了在添加提供的元素之后返回结果数组的要求,并且适用于小型数据集和/或性能和内存不是问题,但是如果处理大型数组则效率低,因为每个{{1}操作将分配一个新数组,将旧数组的所有元素复制到其中,然后将提供的数组的所有元素复制到其中,并取消引用旧数组(而不是简单地将元素添加到同一数组对象中)。

考虑致电concat concat次,每次都添加N元素:

C

另一种方法是创建自己的方法,作为单独的函数或将其添加到Array原型中:

allocate new array, copy C elements
allocate new array, copy 2 * C elements
allocate new array, copy 3 * C elements
...

有了这个,你可以做到

Array.prototype.append = function(e) {
    this.push(e);

    return this;
}

总共不分配多个数组对象。

或许还可以提到,使用ES2015,spread运算符可用于使用[1, 2, 3].append(4).append(5).append(6) 将数组的所有元素添加到另一个数组:

push

但这不符合返回结果数组进行链接的要求,但上面的const arr1 = [1, 2, 3] const arr2 = [4, 5, 6] arr1.push(...arr2); // arr1 is now [1, 2, 3, 4, 5, 6] 方法可用于合并多个数组,如下所示:

append

答案 5 :(得分:0)

推和不移位链

我实际上是来这儿找的,但到目前为止,对于取消班次并没有任何好的答案,所以我也会在这里指出。

链接很简单

const list = ['hi', 'there']
  .concat(['buddy'])
// list is now ['hi', 'there', 'buddy']

但是 unshift 链接很奇怪

// need to use concat + map to do unshift chaining
const list = ['hi', 'there']
  .concat(['buddy'])
  .map((e, i, a) => i == 0 ? a[a.length - 1] : a[i-1])
// list is now ['buddy', 'hi', 'there']

正如您使用 map 所见,为正在使用的数组提供了第三个参数,因此,您可以执行各种奇怪的事情。