29

I want to push all individual elements of a source array onto a target array,

target.push(source);

puts just source's reference on the target list.

In stead I want to do:

for (i = 0; i < source.length; i++) {
    target.push(source[i]);
}

Is there a way in javascript to do this more elegant, without explicitly coding a repetition loop?

And while I'm at it, what is the correct term? I don't think that "flat push" is correct. Googling did not yield any results as source and target are both arrays.

4

4 に答える 4

57

applyあなたが望むことをします:

var target = [1,2];
var source = [3,4,5];

target.push.apply(target, source);

alert(target); // 1, 2, 3, 4, 5

MDC - 適用

指定されたthis 値とarrayとして提供された 引数を使用して関数を呼び出します。

于 2010-10-24T09:56:55.243 に答える
24

concatメソッドを使用できます。

var num1 = [1, 2, 3];  
var num2 = [4, 5, 6];  
var num3 = [7, 8, 9];  

// creates array [1, 2, 3, 4, 5, 6, 7, 8, 9]; num1, num2, num3 are unchanged  
var nums = num1.concat(num2, num3);
于 2010-10-24T09:53:16.617 に答える