ic3*_*ic3 79 javascript arrays performance
在另一个数组中插入数组的更有效方法是什么.
a1 = [1,2,3,4,5];
a2 = [21,22];
newArray - a1.insertAt(2,a2) -> [1,2, 21,22, 3,4,5];
Run Code Online (Sandbox Code Playgroud)
如果a2数组很大,从性能的角度来看,使用splice迭代a2看起来有点糟糕.
谢谢.
nic*_*ckf 156
你可以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];
Run Code Online (Sandbox Code Playgroud)
在ES2015 +中,您可以使用扩展运算符来使其更好一些
a1.splice(2, 0, ...a2);
Run Code Online (Sandbox Code Playgroud)
use*_*716 13
一开始就错了.本来应该用concat().
var a1 = [1,2,3,4,5],
a2 = [21,22],
startIndex = 0,
insertionIndex = 2,
result;
result = a1.slice(startIndex, insertionIndex).concat(a2).concat(a1.slice(insertionIndex));
Run Code Online (Sandbox Code Playgroud)
示例: http ://jsfiddle.net/f3cae/1/
这需要一个slice(0, 2)[文档]的a1至索引,然后再执行0[文档]添加2到阵列中,然后使用a1再次取另一个[1,2]的concat(a2),但是这一次开始通过端同一索引处.
a2如果您愿意,可以添加它:
示例: 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 );
Run Code Online (Sandbox Code Playgroud)
您可以使用[1,2][docs]方法而无需迭代.
var a1 = [1,2,3,4,5],
a2 = [21,22],
startIndex = 0,
insertionIndex = 2,
result;
result = a1.slice(startIndex, insertionIndex).concat(a2).concat(a1.slice(insertionIndex));
Run Code Online (Sandbox Code Playgroud)
Elm*_*mer 10
如果使用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]
Run Code Online (Sandbox Code Playgroud)
有关spread(...)运算符的文档,请参阅此文件https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator
| 归档时间: |
|
| 查看次数: |
69378 次 |
| 最近记录: |