有没有在JavaScript中第三个参数作为数组使用方法Array.splice的方法吗?(Is t

2019-07-19 07:43发布

我试图如下:

var a1 = ['a', 'e', 'f'];  // [a, e, f]
var a2 = ['b', 'c', 'd'];  // [b, c, d]
a1.splice(1, 0, a2);       // expected [a, b, c, d, e, f]
                           // actual (a, [b, c, d], e, f]

我具有A2存在的超静定数组的大小限制在我的使用情况。 有谁知道的方式来养活拼接数组作为替代,或者一个内置函数来做到这一点? 我知道我可以遍历的A2的元素和一次一个它们接起来,但我更喜欢最快速的方法,因为我需要做这个有很多。

Answer 1:

Array.splice支持前两个后多个参数。 这些参数都将被添加到阵列中。 知道了这一点,你可以使用Function.apply传递数组作为参数列表。

var a1 = ['a', 'e', 'f'];
var a2 = ['b', 'c', 'd'];

// You need to append `[1,0]` so that the 1st 2 arguments to splice are sent
Array.prototype.splice.apply(a1, [1,0].concat(a2));


Answer 2:

随着ES6,您可以使用传播运营商。 这使得它更加简明易读。

 var a1 = ['a', 'e', 'f']; var a2 = ['b', 'c', 'd']; a1.splice(1, 0, ...a2); console.log(a1) 



Answer 3:

var a1 = ['a', 'e', 'f'],
    a2 = ['b', 'c', 'd'];

a1.splice(1, 0, a2);

var flatten = [].concat.apply([], a1); // ["a", "b", "c", "d", "e", "f"]


Answer 4:

这应该做的伎俩。

var a1 = ['a', 'e', 'f'];
var a2 = ['b', 'c', 'd'];

a1.concat(a2, a1.splice(1,a1.length-1)) // [a, b, c, d, e, f]


Answer 5:

试试这个:

var params = a2.slice(0);
params.unshift(1,0);
a1.splice.apply(a1,params);

在更一般的情况:

Array.prototype.splice_multi = function(offset,todelete,insert) {
    var params = insert.slice(0);
    params.unshift(offset,todelete);
    return this.splice.apply(this,params);
};
a1.splice_multi(1,0,a2);


Answer 6:

Array.prototype.splice.apply( [1,2,3], [2, 0].concat([4,5,6]) );


Answer 7:

private moveElements(source: Array<any>, target: Array<any>) {
    target.push(...source);
    source.splice(0, source.length);
    //or
    [].push.apply(target,source);
    source.splice(0, source.length);
}


文章来源: Is there a way to use Array.splice in javascript with the third parameter as an array?