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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Slice JS для многомерных массивов

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
lawer85
Отправлено: 18 Января, 2015 - 22:26:14
Post Id


Частый гость


Покинул форум
Сообщений всего: 189
Дата рег-ции: Янв. 2013  


Помог: 1 раз(а)




Можно ли использовать функцию slice для многомерного массива?
(Добавление)
При одномерном массиве все ок создается копия массива отдельная. А вот при 2-мерном массиве почему-то у меня не создается отдельная копия массива, а ссылка на массив.

Т.е. когда я редактирую исходный массив, то изменения происходят и в массиве, созданном через slice
 
 Top
lawer85
Отправлено: 20 Января, 2015 - 12:51:28
Post Id


Частый гость


Покинул форум
Сообщений всего: 189
Дата рег-ции: Янв. 2013  


Помог: 1 раз(а)




Что вообще никаких идей нет? Неужели никто не знает как копировать многомерный массив?
 
 Top
LIME
Отправлено: 20 Января, 2015 - 13:02:17
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Клонировать
хоть бы код показал что ли
 
 Top
SAD
Отправлено: 20 Января, 2015 - 17:33:52
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




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. }
 
 Top
IllusionMH
Отправлено: 20 Января, 2015 - 20:34:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




lawer85, проще всего пропустить через JSON.stringify и parse, но на больших объектах будет заметно медленнее чем рекурсивное копирование. Если нужно работать с большой вложенностью тогда можно открыть исходники любой либы где есть deep clone.

(Отредактировано автором: 20 Января, 2015 - 20:49:04)

 
 Top
armancho7777777 Супермодератор
Отправлено: 20 Января, 2015 - 22:00:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




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
 
 Top
SAD
Отправлено: 21 Января, 2015 - 01:13:03
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




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
 


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

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

Функция проверяет на массив или объект и, в зависимости от этого, выбирает способ итерирования.

(Отредактировано автором: 21 Января, 2015 - 01:17:02)

 
 Top
armancho7777777 Супермодератор
Отправлено: 21 Января, 2015 - 07:58:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




SAD пишет:
Функция проверяет на массив или объект

CODE (javascript):
скопировать код в буфер обмена
  1. console.log([] instanceof Array); // true
  2. console.log(new Array() instanceof Array); // true
 
 Top
armancho7777777 Супермодератор
Отправлено: 21 Января, 2015 - 10:47:42
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Реализация (Отобразить)
Пример (Отобразить)
 
 Top
SAD
Отправлено: 21 Января, 2015 - 11:00:46
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




Ок. Тогда передам автору того скрипта привет от тебя Радость
 
 Top
armancho7777777 Супермодератор
Отправлено: 21 Января, 2015 - 11:02:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Не мажся )
 
 Top
SAD
Отправлено: 21 Января, 2015 - 11:15:06
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




 
 Top
armancho7777777 Супермодератор
Отправлено: 21 Января, 2015 - 21:17:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Ты выложил код как свой, пытался аргументировать подобную проверку типа объекта, так что
armancho7777777 пишет:
Не мажся )

Ну и уверен, вопрос решён...
Тема закрыта!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB