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, тыц
|
Noobloid,
Метод конторый посоветовал nerv_ подходит только для JSON валидных массивов, так что пользуйтесь осторожно. |
Часовой пояс GMT +3, время: 13:33. |