Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Неправильно сортируется обьект (https://javascript.ru/forum/dom-window/84291-nepravilno-sortiruetsya-obekt.html)

dimas15 31.07.2022 21:03

Цитата:

Сообщение от voraa (Сообщение 547013)
Как вы узнаете, в каком порядке у вас расположились ключи?

Еще раз повторю

Типа ничего больше не сделать?

рони 31.07.2022 21:06

Цитата:

Сообщение от dimas15
Типа ничего больше не сделать?

чем код #18 не устраивает?

dimas15 31.07.2022 21:30

Цитата:

Сообщение от voraa (Сообщение 547013)
Как вы узнаете, в каком порядке у вас расположились ключи?

Еще раз повторю

Цитата:

Сообщение от рони (Сообщение 547025)
чем код #18 не устраивает?

Отличное решение, устраивает, спасибо. И кода намного меньше чем у меня.

Aetae 31.07.2022 22:44

Цитата:

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

Вообще вроде определён именно так в последней спеке.
И это меня каждый раз как об этом вспоминаю вводит в состояния бешенства.) Каким безумным извращенцем надо было быть чтобы такое придумать и главное зачем?! Уму непостижимо. Чем им плох был изначальный вариант с простым порядком по мере добавления...

Alexandroppolus 01.08.2022 07:49

Aetae,

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

voraa 01.08.2022 09:59

Цитата:

Сообщение от Aetae
Вообще вроде определён именно так в последней спеке.

Вроде нет
ECMAScript 2023 https://tc39.es/ecma262/#sec-enumera...ect-properties
Так и сказано
14.7.5.9
Цитата:

The mechanics and order of enumerating the properties is not specified but must conform to the rules specified below.
rules specified below касаются удаления и добавления свойств во время итерации. Про порядок ни слова.

Aetae 01.08.2022 14:13

Цитата:

Сообщение от Alexandroppolus (Сообщение 547038)
Aetae,

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

Не согласен. ИМХО, язык такого высокого уровня как js должен преследовать в первую очередь интуитивность и удобство, пусть даже ценой небольшой просадки производительности или переусложнённой внутренней механики.
Текущая реализация нифига не интуитивна и нифига не удобна, реализация с рандомным порядком - также нифига не интуитивна и не удобна. Такие дела.

В седой древности подобных топиков тоже хватало, только касались они как раз НЕгарантированого порядка.
Недолгое затишье было только когда на некоторое время все договорились просто делать по мере добавления, но всё быстро снова сломали.)

Цитата:

Сообщение от voraa (Сообщение 547040)
Вроде нет
ECMAScript 2023 https://tc39.es/ecma262/#sec-enumera...ect-properties
Так и сказано
14.7.5.9
rules specified below касаются удаления и добавления свойств во время итерации. Про порядок ни слова.

Это описывается тут: https://tc39.es/ecma262/#sec-ordinaryownpropertykeys

Alexandroppolus 01.08.2022 15:47

Цитата:

Сообщение от Aetae
реализация с рандомным порядком - также нифига не интуитивна и не удобна.

ну, видимо, у всех по-разному, дело вкуса :)

я вообще долгое время не знал, что в объектах (да и в Map) может быть какой-то порядок, и всегда для таких задач пользовался массивами - там порядок задан явно.

MallSerg 02.08.2022 14:05

Цитата:

Сообщение от Aetae
Чем им плох был изначальный вариант с простым порядком по мере добавления...

Изначального варианта вообще не было но первые реализации именно так и поступали и в целях соблюдения обратной совместимости это было общепринятой нормой.
Новый вариант правил размещения позволяет размещать объекты в памяти с применением реляционной алгебры в частности V8 использует красно черные бинарные деревья что позволяет математически оптимально размещать и использовать данные.

Это сделано с целью упрощения реализации позволило удалить из движка JS отдельный не нужный механизм хранящий ссылки на данные, порядок их размещения и данные индексации.

В общем сделали протестили и продавили новый вариант в стандарт.


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