在另一个数组中插入一个数组
在另一个数组中插入数组的更有效方法是什么?
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/
这需要a1
的slice()
[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