Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Slice JS для многомерных массивов
Форумы портала PHP.SU » Клиентская разработка » JavaScript & VBScript » Slice JS для многомерных массивов

Страниц (1): [1]
 

1. lawer85 - 18 Января, 2015 - 22:26:14 - перейти к сообщению
Можно ли использовать функцию slice для многомерного массива?
(Добавление)
При одномерном массиве все ок создается копия массива отдельная. А вот при 2-мерном массиве почему-то у меня не создается отдельная копия массива, а ссылка на массив.

Т.е. когда я редактирую исходный массив, то изменения происходят и в массиве, созданном через slice
2. lawer85 - 20 Января, 2015 - 12:51:28 - перейти к сообщению
Что вообще никаких идей нет? Неужели никто не знает как копировать многомерный массив?
3. LIME - 20 Января, 2015 - 13:02:17 - перейти к сообщению
Клонировать
хоть бы код показал что ли
4. SAD - 20 Января, 2015 - 17:33:52 - перейти к сообщению
CODE (javascript):
скопировать код в буфер обмена
  1. function deepCopy(obj) {
  2.     if (Object.prototype.toString.call(obj) === '[object Array]') {
  3.         var out = [], i = 0, len = obj.length;
  4.         for ( ; i < len; i++ ) {
  5.             out[i] = arguments.callee(obj[i]);
  6.         }
  7.         return out;
  8.     }
  9.     if (typeof obj === 'object') {
  10.         var out = {}, i;
  11.         for ( i in obj ) {
  12.             out[i] = arguments.callee(obj[i]);
  13.         }
  14.         return out;
  15.     }
  16.     return obj;
  17. }
5. IllusionMH - 20 Января, 2015 - 20:34:21 - перейти к сообщению
lawer85, проще всего пропустить через JSON.stringify и parse, но на больших объектах будет заметно медленнее чем рекурсивное копирование. Если нужно работать с большой вложенностью тогда можно открыть исходники любой либы где есть deep clone.
6. armancho7777777 - 20 Января, 2015 - 22:00:40 - перейти к сообщению
SAD пишет:
if (Object.prototype.toString.call(obj) === '[object Array]') {



CODE (javascript):
скопировать код в буфер обмена
  1. console.log(typeof []); // object
  2. console.log(typeof new Array()); // object
  3. console.log(typeof {}); // object
  4. console.log(typeof new Object()); // object
7. SAD - 21 Января, 2015 - 01:13:03 - перейти к сообщению
armancho7777777 пишет:
SAD пишет:
if (Object.prototype.toString.call(obj) === '[object Array]') {



CODE (javascript):
скопировать код в буфер обмена
console.log(typeof []); // object
console.log(typeof new Array()); // object
console.log(typeof {}); // object
console.log(typeof new Object()); // object
 


И что, позволь спросить, тебя смущает??

Процитированная строка дает то, что собственно и нужно.

Функция проверяет на массив или объект и, в зависимости от этого, выбирает способ итерирования.
8. armancho7777777 - 21 Января, 2015 - 07:58:12 - перейти к сообщению
SAD пишет:
Функция проверяет на массив или объект

CODE (javascript):
скопировать код в буфер обмена
  1. console.log([] instanceof Array); // true
  2. console.log(new Array() instanceof Array); // true
9. armancho7777777 - 21 Января, 2015 - 10:47:42 - перейти к сообщению
Реализация (Отобразить)
Пример (Отобразить)
10. SAD - 21 Января, 2015 - 11:00:46 - перейти к сообщению
Ок. Тогда передам автору того скрипта привет от тебя Радость
11. armancho7777777 - 21 Января, 2015 - 11:02:51 - перейти к сообщению
Не мажся )
12. SAD - 21 Января, 2015 - 11:15:06 - перейти к сообщению
Вот ему http://james[dot]padolsey[dot]com/javasc[dot][dot][dot]ects-and-arrays/ =)
13. armancho7777777 - 21 Января, 2015 - 21:17:14 - перейти к сообщению
Ты выложил код как свой, пытался аргументировать подобную проверку типа объекта, так что
armancho7777777 пишет:
Не мажся )

Ну и уверен, вопрос решён...

 

Powered by ExBB FM 1.0 RC1