在JavaScript中将一个数组附加到另​​一个数组[重复]

Posted

技术标签:

【中文标题】在JavaScript中将一个数组附加到另​​一个数组[重复]【英文标题】:Append an array to another array in JavaScript [duplicate] 【发布时间】:2012-03-27 21:27:00 【问题描述】:

此问题与以下问题完全相同:How to append an array to an existing javascript Array?

如何在 JavaScript 中将一个数组附加到另​​一个数组?

人们可能会用其他方式表达这个问题:

将一个数组添加到另一个数组 连接/连接数组 用另一个数组扩展一个数组 将一个数组的内容放到另一个数组中

我花了一些时间寻找这个问题的答案。有时像这样最简单的问题最难找到答案,所以我希望在这里添加问题,并根据blog post 提供大量关键词和短语。请随时使用任何其他有用信息来回答此问题,或编辑下面的关键词和短语。

【问题讨论】:

回答自己的问题可以,直接把回答放在问题本身可以。请从问题中删除答案,将其作为答案发布并自我接受:-)。此外,其他人可能会提供更好的答案,超过你的;-)。 但是问题应该用答案来回答,而不是在问题中。但无论如何它是dupe,multiple times,所以我投票结束。无论如何,搜索“javascript concatenate arrays”出现了很多点击。 @Dave Newton:问题是如果您不知道使用关键字“连接”,那么您将找不到任何东西。我认为这就是为什么很难找到简单问题的答案的原因。专家就像“只需输入这个!”。但是寻找该问题答案的人不会知道使用专家知道的关键字进行搜索。 @Tomasz Nurkiewicz:我可以将答案移至答案部分。但是,我想给其他人一个回答问题并获得分数的机会,而不是为自己创造分数。 @DutrowLLC "Append javascript array" 返回大部分相同的,包括this one 和one I posted above; append 是您的标题/术语。我有点同情,但是在谷歌或 SO 上搜索都会出现这些。如果我在新问题中输入您的标题,它也会显示上述两个中的后者。 【参考方案1】:

如果要修改原始数组而不是返回新数组,请使用.push()...

array1.push.apply(array1, array2);
array1.push.apply(array1, array3);

我使用.apply 一次推送数组23 的各个成员。

或者...

array1.push.apply(array1, array2.concat(array3));

要处理大数组,可以分批进行。

for (var n = 0, to_add = array2.concat(array3); n < to_add.length; n+=300) 
    array1.push.apply(array1, to_add.slice(n, n+300));


如果你经常这样做,请创建一个方法或函数来处理它。

var push_apply = Function.apply.bind([].push);
var slice_call = Function.call.bind([].slice);

Object.defineProperty(Array.prototype, "pushArrayMembers", 
    value: function() 
        for (var i = 0; i < arguments.length; i++) 
            var to_add = arguments[i];
            for (var n = 0; n < to_add.length; n+=300) 
                push_apply(this, slice_call(to_add, n, n+300));
            
        
    
);

并像这样使用它:

array1.pushArrayMembers(array2, array3);

var push_apply = Function.apply.bind([].push);
var slice_call = Function.call.bind([].slice);

Object.defineProperty(Array.prototype, "pushArrayMembers", 
    value: function() 
        for (var i = 0; i < arguments.length; i++) 
            var to_add = arguments[i];
            for (var n = 0; n < to_add.length; n+=300) 
                push_apply(this, slice_call(to_add, n, n+300));
            
        
    
);

var array1 = ['a','b','c'];
var array2 = ['d','e','f'];
var array3 = ['g','h','i'];

array1.pushArrayMembers(array2, array3);

document.body.textContent = JSON.stringify(array1, null, 4);

【讨论】:

这种方式很糟糕,不适用于> 500个元素数组 tl;dr: array1 = [].concat(array1, array2, array3 /*, .. */); 更好 @Alex:无法修改原始数组,这就是问题所在。当您已经有一个数组时,最好使用[].concat(...。应该是array1.concat(array2, array3) @squint point,但array1.concat(array2, array3) 也不要这样做,因为concat() 返回一个新数组。 我最喜欢重复问题的答案:***.com/questions/1374126/…

以上是关于在JavaScript中将一个数组附加到另​​一个数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在javascript中将对象数组复制到另一个数组中(深度复制)

在javascript中将对象数组复制到另一个数组而没有对象引用(深拷贝)

我可以在javascript中将数组附加到“formdata”吗?

在 Python 中将行从一个 CSV 附加到另一个

如何在 Discord Py 中将列表附加并保存到另一个文件中?

在C中将奇数索引元素从一个数组复制到另一个数组