Как сделать «плоский толчок» в JavaScript? - PullRequest
24 голосов
/ 24 октября 2010

Я хочу поместить все отдельные элементы исходного массива в целевой массив,

target.push(source);

помещает только ссылку источника в целевой список.

Вместо этого я хочу сделать:

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

Есть ли в javascript способ сделать это более элегантно, без явного кодирования цикла повторения?

И когда я в этом, каков правильный термин?Я не думаю, что «плоский толчок» является правильным.Поиск в Google не дал результатов, так как и источник, и цель являются массивами.

Ответы [ 3 ]

46 голосов
/ 24 октября 2010

apply делает то, что вы хотите:

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

target.push.apply(target, source);

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

MDC - применить

Вызывает функцию с данным this значение и аргументы предоставляются в виде массив .

25 голосов
/ 24 октября 2010

Вы можете использовать метод 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);
2 голосов
/ 15 января 2018

Вы можете просто использовать синтаксис распространения :

var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];

arr1 = [...arr1, ...arr2];
    // [0, 1, 2, 3, 4, 5]

Альтернативно:

var arr1 = ['a', 'b', 'c'];
var arr2 = [1, 2, 3, ...arr1];
        // [1, 2, 3, 'a', 'b', 'c']

Демонстрация:

var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];

arr1 = [...arr1, ...arr2];
console.log(arr1);
...