Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Изменить порядок свойств объектов в большом массиве (https://javascript.ru/forum/misc/60614-izmenit-poryadok-svojjstv-obektov-v-bolshom-massive.html)

Keramet 11.01.2016 15:25

laimas,
Этот файл берётся отсюда: http://javascript.ru/forum/study/602...halujjsta.html
Это просто какое-то тестовое задание, я его взял чисто в учебных целях. Пытаюсь по минимуму изменять исходные файлы, просто делаю "в лоб": не меняя исходников, не применяя никаких библиотек - только нативный JS :)

рони 11.01.2016 15:43

Цитата:

Сообщение от laimas
На сервере функций пересечения массивов хоть отбавляй, что позволяет сделать нужный порядок в любой ситуации и это плевое дело

либо вы предлагаите заменить обьект на массивы либо я вас не понимаю.

laimas 11.01.2016 15:52

В чем смысл этих заданий? Решать задачи, это ведь не только умение что-то использовать, но умение ответить себе, целесообразно ли это делать на клиенте? Ведь в реалии это будет файл с сервера, а значит выгоднее привести к порядку на нем, клиенту же только сформировать таблицу.
Может более полезную задачу решать? К примеру, есть N таблиц, данные которых нужно не только выводить, но и редактировать. А колонок у таблицы может быть много, что и неудобно для отображения, да и не обязательно нужны все при просмотре. Вот и напишите на клиенте управление: выбор необходимых для вывода колонок, выбор параметров фильтра для колонок, порядка сортировки. При этом параметры фильтра и сортировки зависят от типа данных полей базы, данные из которой и будут браться. Установки выбранные в управлении сохраняются на клиенте, а также можно сохранять пресеты.
Тут тоже придется изменять порядок свойств объекта, но это и оправдано, и пригодится.

laimas 11.01.2016 15:58

Цитата:

Сообщение от рони
либо вы предлагаите заменить обьект на массивы либо я вас не понимаю

Все зависит от того каковы исходные данные, если это JSON, то по умолчанию декодирование его и вернет объект, перестроить порядок элементов которого можно и обычным циклом. Можно при декодировании получить не объект, а обычный массив, а можно проще, перезаписывать значения объявленного массива с нужным порядком ключей (порядок их в исходном роли не играет) каждым вложением объекта сконвертированного в массив, сохраняя в текущий массив (модификация) или новый.

рони 11.01.2016 16:14

laimas,
понятно что лучше упорядочить данные на сервере, но как, я так и не понял, что вы предлагаите.

laimas 11.01.2016 16:22

Пусть исходное это объект, хотя на сервере все проще, достаточно указать true вторым параметром при декодировании json и результат будет массив. Далее каждое вложение сохранять как array_replace([a=>1, b=>1, c=>1, ...], array), где первый аргумент функции массив с нужными ключами и порядком их, второй аргумент, это каждое вложение исходного массива.
Полученный массив в json и сохранить.

Keramet 11.01.2016 16:34

Цитата:

Сообщение от laimas (Сообщение 403267)
В чем смысл этих заданий? Решать задачи, это ведь не только умение что-то использовать, но умение ответить себе, целесообразно ли это делать на клиенте? Ведь в реалии это будет файл с сервера, а значит выгоднее привести к порядку на нем, клиенту же только сформировать таблицу.

Это их из серии: "в чём смысл учить химию, физику, биологию, .... и т.д. в школе?" Ведь в реалии есть Гугл - а значит выгоднее там искать все ответы на любые вопросы.

Я это делаю для закрепления теоретических знаний и для "набития" руки, это мой подход к обучению: прочитал, осознал/разобрался, сделал!

laimas 11.01.2016 16:48

Да уж... Это из серии когда в учебных заведениях дают задания, от которых ни пользы, ни проку.
Обучение, это в первую очередь научиться размышлять. Вы хотите писать веб приложения, а это приложение из двух частей, одна на сервере, вторая у клиента, но работать они должны как единое целое. Если сервер будет отдавать клиенту неподходящие данные, то это неизбежно повлечет за собой неоправданные действия на клиенте, и наоборот, неудачный запрос клиента, слезы для сервера.
Я могу дать ссылки на темы с этого форума, где вопрошающий даже знает предмет, то есть то, что он использует в коде, но при этом совсем не понимает того, что шлет серверу совсем не потребное.
Есть и к теме "перековырять 60000 элементов на клиенте", совсем недавно, и даже наводящие вопросы не помогают, не понимает человек, что он фактически, будучи торговцем в реалии, покупал бы некий сорт помидоров не для продажи, а исключительно только для того, чтобы их тара служила подставкой для ящиков других сортов. Абсурд? Конечно. Но почему этот абсурд допустим когда решаем программную задачу?
Для того чтобы понять вкусен или нет суп, совсем не обязательно съесть всю его кастрюлю. Вы же ради уяснения "как", гоняете нехилый файл, да еще уточняя для тех кто вам отвечает - 10 000 строк.
Можно выучить наизусть все функции и конструкции языка, быть примерным кодером, не делая даже малейших ошибок в синтаксисе и прочем, но при этом так и не научиться все это использовать.

Keramet 11.01.2016 16:57

laimas,
Есть хорошее выражение: слона надо кушать по частям. для меня сейчас первостепенно изучить фронт-энд разработку. в серверной реализацией буду знакомиться позднее. не вижу ничего плохого в решении разных задач, пусть даже и не совсем практичных. Если следовать вашей логике - тогда всё можно делать на сервере и передавать в клиент "конфетку".

laimas 11.01.2016 17:06

Ну да, и чтобы понять это нужно обязательно?

Цитата:

Сообщение от Keramet
массив большой: ordersList.length > 10 000

А что тогда скупиться, да сразу 1 000 000, для усвояемости? :)

У меня же именно после этого вашего уточнения и возник вопрос - "а нахрена?"
Хотите поиметь от этого объема пользы? Ну так тогда и задача должна выглядеть иначе - как оптимизировать? Вам не приходило в голову, что обходить массив можно с двух его краев? Глядишь и польза была бы от бессмысленной задачи для клиента.


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