Добавьте два массива без использования метода concat
Вот пример того, что я хотел бы сделать
function test(r){
var arr = ['d','e','f'];
r.push(arr);
/*
More Code
*/
return r;
}
var result = test(['a','b','c']);
alert(result.length);//I want this to alert 6
Что мне нужно сделать, это передать массив и присоединить другие массивы к концу, а затем вернуть массив. Из-за прохождения по ссылке я не могу использовать array.concat(array2);
. Есть ли способ сделать это, не используя что-то вроде цикла for, чтобы добавлять элементы один за другим. Я пробовал что-то вроде r.push(arr.join());
, но это тоже не сработало. Кроме того, мне бы хотелось иметь объекты с массивами, поэтому r.push(arr.join());
работает не очень хорошо.
Ответы
Ответ 1
>>> var x = [1, 2, 3], y = [4, 5, 6];
>>> x.push.apply(x, y) // or Array.prototype.push.apply(x, y)
>>> x
[1, 2, 3, 4, 5, 6]
Альтернативно, используя destructuring, вы можете сделать это
//generate a new array
a=[...x,...y];
//or modify one of the original arrays
x.push(...y);
Ответ 2
function test(r){
var _r = r.slice(0), // copy to new array reference
arr = ['d','e','f'];
_r = _r.concat(arr); // can use concat now
return _r;
}
var result = test(['a','b','c']);
alert(result.length); // 6
Ответ 3
Это ответ emulbreh, я просто отправляю тест, который я проверил, чтобы проверить его.
Все кредиты должны быть отправлены на emulbreh
// original array
var r = ['a','b','c'];
function test(r){
var arr = ['d','e','f'];
r.push.apply(r, arr);
/*
More Code
*/
return r;
}
var result = test( r );
console.log( r ); // ["a", "b", "c", "d", "e", "f"]
console.log( result === r ); // the returned array IS the original array but modified