18.01.2015, 23:20
|
Интересующийся
|
|
Регистрация: 09.01.2015
Сообщений: 12
|
|
Slice JS для многомерных массивов
Можно ли использовать функцию slice для многомерного массива?
|
|
18.01.2015, 23:57
|
Интересующийся
|
|
Регистрация: 22.10.2013
Сообщений: 11
|
|
Не вижу никаких препятствий для:
[[1, 2], [3, 4], [5, 6]].slice(1, 2); // [[3, 4]]
|
|
19.01.2015, 00:26
|
Интересующийся
|
|
Регистрация: 09.01.2015
Сообщений: 12
|
|
При одномерном массиве все ок создается копия массива отдельная. А вот при 2-мерном массиве почему-то у меня не создается отдельная копия массива, а ссылка на массив.
|
|
19.01.2015, 00:28
|
Интересующийся
|
|
Регистрация: 09.01.2015
Сообщений: 12
|
|
Т.е. когда я редактирую исходный массив, то изменения происходят и в массиве, созданном через slice
|
|
19.01.2015, 00:50
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от 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());
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
19.01.2015, 01:06
|
Интересующийся
|
|
Регистрация: 16.01.2015
Сообщений: 23
|
|
<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>
работает
Последний раз редактировалось Noobloid, 19.01.2015 в 01:09.
|
|
19.01.2015, 01:45
|
Интересующийся
|
|
Регистрация: 09.01.2015
Сообщений: 12
|
|
<script>
arr = [[0, 1, 3]];
arr2 = arr.slice();
arr[0][1] = 5;
alert(arr2);
alert(arr);
</script>
А так нет!
|
|
19.01.2015, 02:35
|
Интересующийся
|
|
Регистрация: 16.01.2015
Сообщений: 23
|
|
arr = [[0, 1, 3]];
arr2 = arr;
arr[0][1] = 5;
alert(arr2);
alert(arr);
дык и так нет, сие чудо Scope называется, хотя может Scope тут и не причём. Нормального пояснения почему не работает если целиком копировать так и не нащёл. Нужно запомнить метод который nerv_ написал.
var arr2 = Array.apply(this, arr); тоже не пашет век живи век учись)
Последний раз редактировалось Noobloid, 19.01.2015 в 03:58.
|
|
19.01.2015, 02:58
|
Профессор
|
|
Регистрация: 07.11.2013
Сообщений: 4,662
|
|
|
|
19.01.2015, 10:54
|
Профессор
|
|
Регистрация: 12.12.2012
Сообщений: 1,398
|
|
Noobloid,
Метод конторый посоветовал nerv_ подходит только для JSON валидных массивов, так что пользуйтесь осторожно.
|
|
|
|