Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Сортировка по внутреннему элементу (https://javascript.ru/forum/misc/64321-sortirovka-po-vnutrennemu-ehlementu.html)

warren buffet 03.08.2016 12:48

id не дублируется умнег, а сохраняется. Оно никому не мешает лежа внутри объекта как лежало, поскольку при доступе к элементу по динамически вычисляемому ключу ты НЕ узнаешь id, ибо объект НЕ знает про своего родителя, а когда все в нем - бери что хочешь. Теперь уже иди экономь байты на убивании id.

warren buffet 03.08.2016 12:55

Это господа наше фсе. Рюзга когда узнает как надо, не радуется "А, так вот оно как, ну классно", а горюет "А за что я кровь проливал" и жалко ему становится своего говнокода. Тайком может быть исправит немного, скрепя сердце и скрипя извилинами покиляет часть, но не все, ибо если кодов мало, то нет морального удовлетворения. Это об анальной фиксации читайте у Фрейда.

KupueIIIKo 03.08.2016 13:44

Цитата:

Сообщение от warren buffet (Сообщение 424222)
Это господа наше фсе. Рюзга когда узнает как надо, не радуется "А, так вот оно как, ну классно", а горюет "А за что я кровь проливал" и жалко ему становится своего говнокода. Тайком может быть исправит немного, скрепя сердце и скрипя извилинами покиляет часть, но не все, ибо если кодов мало, то нет морального удовлетворения. Это об анальной фиксации читайте у Фрейда.

:agree: Я не ругаюсь и не критикую. Просто сказал, что пришло в голову. Если в JS связи между переменной и названием построены так же то это нечего печально. Оптимизация кода после запуска хотя бы рабочего кода

warren buffet 03.08.2016 16:38

У тебя просто подгорело, когда ты понял, что вся эта каша с переливанием пропертей вообще не нужна. Типа а-чо-такова что дохера лишних кодов, подумаешь там несколько десятков байт уедут, но анальная фиксация дала знать - оставленный id тебе сразу бросился в глаза.

Короче, полюби уже себя, делай для себя как лучше, а лучше - это значит лучше, а не как получилось из-за незнания как делается. Делается вообще просто. На сервере формируешь массив и выдаешь его в json или xml браузеру, тот передает скрипту - втыкай и не надо молотить.

Из БД получается индексный массив, ну так на сервере профтыкай в него идешники и все. Например на пехепе.

$assoc=array();

$rows = $db->query('select * from `messages` where 1')->fetch_all(MYSQLI_ASSOC); /* или какой у тебя драйвер бд */

foreach($rows as $row)
   $assoc[$row['id']]=$row;

echo json_encode($assoc); 

exit;


В браузере просто сразу рендеришь, скажем

var el;
for(var id in json)
	if(el=wrapper.querySelector('#'.id))
		edit_post(json[id]);
		/*
		а вот тут скажи мне брат, как edit_post() узнает про id,
		если его нет внутри объекта? Если id нет внутри, 
		тебе придется передавать его как дополнительный 
		аргумент фкнкции, а зачем? Понял зачем id внутри?
		*/
	else
		create_post(json[id]);


Потому что "модель" уже сделана на сервере.

warren buffet 03.08.2016 16:45

Почему нормализовать и приводить в порядок лучше на сервере. Потому что затраты на запуск треда, пехепе или какой там привод - просто несоизмеримы с тем, что затем делается этими скриптами и модулями. Это все равно что поднять пятиэтажный дом и волноваться о коробке чая оставленного на кухне, типа она создаст лишний вес. Когда ты попал в серверный скрипт - можешь там резвиться до посинения. Ты посмотри как прославленные фрейморки устроены изнутри. Жаба - для рендера. Какие-то там модели и прочая тряхомудия - чисто культура, чистого MVC на жабе не надо вообще.

*Из БД получается индексный массив

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

Premature optimization вопит про el=wrapper.querySelector(), тогда так

for(var id in json)
   if(id in messages) /* старый массив */
      edit_post(json[id]);
  else
     create_post(json[id])

messages=json; /* теперь новые данные стали старыми */


Одна процедура на всё. Если messages={}, то сработает только create_post()


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