Если вам нужно, чтобы иметь возможность гнездовых массивов, то я бы изменить функцию .add()
, чтобы иметь .concat()
дублировать массив в переменную, .push()
новое значение в новый массив, и вернуть его.
function add(arr) {
var newArr = arr.concat(); // duplicate
newArr.push("e"); // push new value
return newArr; // return new (modified) Array
}
Вы можете использовать concat()
, а также, и возвращает новый массив, он создает.
var myArray = ["a", "b", "c", "d"];
function add(arr) {
return arr.concat("e");
}
var newArray = add(myArray);
console.log(newArray); // ["a", "b", "c", "d", "e"]
console.log(myArray); // ["a", "b", "c", "d"]
Таким образом, вместо двух методов .slice()
то .push()
, вы выполняете его с одним .concat()
.
Это также дает вам преимущество прохождения другого массива вместо строки, так:
return arr.concat(["e","f"]);
даст вам:
// ["a", "b", "c", "d", "e", "f"]
вместо:
// ["a", "b", "c", "d", ["e", "f"] ]
См также : http://stackoverflow.com/questions/518000/is-javascript-is-a-pass-by-reference-or-pass-by-value-language – Shog9
Я добавляю d альтернативное решение. Когда вы выполняете '.slice()' вам нужно сделать копию массива, сохраните его '.push()' новое значение, а затем верните копию. Я использовал '.concat()', который позволит вам пройти в исходном массиве и выполнить все вышеперечисленные шаги за один раз. – user113716