2015-12-16 8 views
0

Я пытаюсь использовать Array.prototype.push.apply для объединения двух списков.Array.prototype.push.apply неожиданное поведение

c = Array.prototype.push.apply(a, b); 

Однако это не слияние массивов, когда второй из них является [].

, например, если

a = ['x', 'y', 'z'] 
b = [] 

c будет 3

Почему это происходит? Не следует ли обрабатывать [] как любой массив?

+0

метод толчок возвращает длину нового массива –

+0

Что вы имеете в виду под «не может»? Что так неожиданно в результате «3»? Какие выводы вы пробовали, где он «работал»? – Bergi

ответ

1

Просто используйте Array.prototype.concat:

c = a.concat(b); 
1

Это совершенно правильно, потому что Array.push() возвращает длину нового массива.

Если вы хотите новый массив, который имеет объединенное значение, вместо этого используйте Array.concat().

1

Возможно, вы пытались достичь push.apply, чтобы добавить b в a. Однако этот метод означает, что вам не нужно создавать новый массив c, чтобы сохранить результат.

var a = [1, 2, 3, 4], b = [5]; 
a.push.apply(a, b); // a = [1, 2, 3, 4, 5] 
1

Ваша реальная проблема заключается в .apply, это спросить contetx (а) и массив значений (б), если вы передаете пустой массив он действует, как вы не прошли ни одного значения ...

Попробуйте это:

c = Array.prototype.push.call(a, b); 

//c = 4 
Смежные вопросы