Slice JS для многомерных массивов
Можно ли использовать функцию slice для многомерного массива?
|
Не вижу никаких препятствий для:
[[1, 2], [3, 4], [5, 6]].slice(1, 2); // [[3, 4]] |
При одномерном массиве все ок создается копия массива отдельная. А вот при 2-мерном массиве почему-то у меня не создается отдельная копия массива, а ссылка на массив.
|
Т.е. когда я редактирую исходный массив, то изменения происходят и в массиве, созданном через slice
|
Цитата:
function copy(jsonLikeObject) {
return JSON.parse(JSON.stringify(jsonLikeObject));
}
var arr1 = [1,2];
var arr2 = copy(arr1);
arr2.push(3);
alert(arr1.join());
alert(arr2.join());
|
<script> var arr = [[1, 2], [3, 4], [5, 6], [5, 6], [5, 6], [5, 6]]; var test = arr.slice(1, 3); test.push(["новое значение", "новое значение"]); console.log(test); console.log(arr); </script> работает |
<script> arr = [[0, 1, 3]]; arr2 = arr.slice(); arr[0][1] = 5; alert(arr2); alert(arr); </script> А так нет! |
arr = [[0, 1, 3]];
arr2 = arr;
arr[0][1] = 5;
alert(arr2);
alert(arr);
дык и так нет, сие чудо Scope называется, хотя может Scope тут и не причём. Нормального пояснения почему не работает если целиком копировать так и не нащёл. Нужно запомнить метод который nerv_ написал. var arr2 = Array.apply(this, arr); тоже не пашет :blink: век живи век учись) |
Noobloid,
Метод конторый посоветовал nerv_ подходит только для JSON валидных массивов, так что пользуйтесь осторожно. |
| Часовой пояс GMT +3, время: 04:12. |