24

私は次のことを試みています:

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の要素を繰り返し処理して、一度に1つずつスプライスできることはわかっていますが、これを頻繁に行う必要があるため、可能な限り最速の方法を使用したいと思います。

4

7 に答える 7

35

Array.splice最初の2つの後の複数の引数をサポートします。これらの引数はすべて配列に追加されます。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));
于 2013-02-05T19:41:50.153 に答える
20

ES6では、スプレッド演算子を使用できます。それはそれをはるかに簡潔で読みやすくします。

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

a1.splice(1, 0, ...a2);
console.log(a1)

于 2017-10-25T08:56:39.807 に答える
4
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"]
于 2013-02-05T19:42:45.457 に答える
2

これでうまくいくはずです。

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]
于 2013-02-05T19:46:49.723 に答える
1

これを試して:

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);
于 2013-02-05T19:42:29.613 に答える
0
Array.prototype.splice.apply( [1,2,3], [2, 0].concat([4,5,6]) );
于 2013-08-02T16:23:41.000 に答える
0
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);
}
于 2016-07-28T13:47:56.310 に答える