在另一个数组中插入一个数组

在另一个数组中插入数组的更有效方法是什么?

a1 = [1,2,3,4,5];
a2 = [21,22];

newArray - a1.insertAt(2,a2) -> [1,2, 21,22, 3,4,5];

如果a2数组很大,则从性能的角度来看,使用拼接对a2进行迭代看起来有点夸张。

谢谢。


您可以将splice与一些apply技巧结合使用:

a1 = [1,2,3,4,5];
a2 = [21,22];

a1.splice.apply(a1, [2, 0].concat(a2));

console.log(a1); // [1, 2, 21, 22, 3, 4, 5];

在ES2015 +中,您可以使用扩展运算符来使其更好一些

a1.splice(2, 0, ...a2);

一开始它错了。 应该使用concat()来代替。

var a1 = [1,2,3,4,5];
var a2 = [21,22];

var result = a1.slice( 0, 2 ).concat( a2 ).concat( a1.slice( 2 ) );

例如: http : //jsfiddle.net/f3cae/1/

这需要a1slice() [docs]直到索引,然后执行concat() [docs]将a2添加到该数组,然后再次使用.concat()再次获取a1另一个.slice() ,但是this时间从相同的索引开始到结束。

如果你愿意,可以将它添加到Array.prototype

例如: http : //jsfiddle.net/f3cae/2/

Array.prototype.injectArray = function( idx, arr ) {
    return this.slice( 0, idx ).concat( arr ).concat( this.slice( idx ) );
};

var a1 = [1,2,3,4,5];
var a2 = [21,22];

var result = a1.injectArray( 2, a2 );

您可以使用splice() [docs]方法而不进行迭代。

a1.splice( 2, 0, a2 );

http://jsfiddle.net/f3cae/


如果使用ES2015或更高版本,现在可以执行此操作:

var a1 = [1,2,3,4,5];
var a2 = [21,22];
a1.splice(2, 0, ...a2);
console.log(a1) // => [1,2,21,22,3,4,5]

有关传播(...)运算符的文档,请参阅此https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator

链接地址: http://www.djcxy.com/p/29323.html

上一篇: insert an array inside another array

下一篇: Set dynamic value to Array in JS like PHP