Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Slice JS для многомерных массивов (https://javascript.ru/forum/misc/53046-slice-js-dlya-mnogomernykh-massivov.html)

lawer85 18.01.2015 23:20

Slice JS для многомерных массивов
 
Можно ли использовать функцию slice для многомерного массива?

y0uix 18.01.2015 23:57

Не вижу никаких препятствий для:
[[1, 2], [3, 4], [5, 6]].slice(1, 2); // [[3, 4]]

lawer85 19.01.2015 00:26

При одномерном массиве все ок создается копия массива отдельная. А вот при 2-мерном массиве почему-то у меня не создается отдельная копия массива, а ссылка на массив.

lawer85 19.01.2015 00:28

Т.е. когда я редактирую исходный массив, то изменения происходят и в массиве, созданном через slice

nerv_ 19.01.2015 00:50

Цитата:

Сообщение от lawer85
Можно ли использовать функцию 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());

Noobloid 19.01.2015 01:06

<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>

работает

lawer85 19.01.2015 01:45

<script>
		arr = [[0, 1, 3]];
		arr2 = arr.slice();
		arr[0][1] = 5;
		alert(arr2);
		alert(arr);
</script>


А так нет!

Noobloid 19.01.2015 02:35

arr = [[0, 1, 3]];
        arr2 = arr;
        arr[0][1] = 5;
        alert(arr2);
        alert(arr);

дык и так нет, сие чудо Scope называется, хотя может Scope тут и не причём. Нормального пояснения почему не работает если целиком копировать так и не нащёл. Нужно запомнить метод который nerv_ написал.
var arr2 = Array.apply(this, arr); тоже не пашет :blink: век живи век учись)

Rise 19.01.2015 02:58

Noobloid, тыц

tsigel 19.01.2015 10:54

Noobloid,
Метод конторый посоветовал nerv_ подходит только для JSON валидных массивов, так что пользуйтесь осторожно.


Часовой пояс GMT +3, время: 13:33.