LINUX.ORG.RU

Javascript. Помогите отсортировать объект по ключу.

 ,


0

1

Всем привет.

Имеется обхект вида:

{
'field1': {...},
'field2': {...},
'fieldN': {...}
}

Вопрос. Как отсортировать объект по возрастанию, в алфавитном порядке по field...?



Последнее исправление: djnoob (всего исправлений: 1)

Объекты грубо говоря сортировать нельзя, сортировать нужно массив.

surefire ★★★
()

В JS порядок свойств в объекте не определён. Если всё же надо, то можно использовать лодэшевские toPairs и sortBy.

static_lab ★★★★★
()

Как отсортировать объект по возрастанию, в алфавитном порядке по field...?

Ты хочешь хранить в отсортированном виде или получить «последовательный» доступ? Если первое - то зачем? Если второе, то получи массив ключей, отсортируй - и вперёд!

yyk ★★★★★
()
Ответ на: комментарий от Vit

В большинстве JS-движков они действительно перечисляются в порядке создания. Только в спецификации сказано, что порядок неопределён; я бы не стал на это закладываться.

Y ★★
()

Алфавитном? А с юникодной алфавитностью сталкивался? Мало не покажется.

anonymous
()
Ответ на: комментарий от mix_mix

У них там очень много чего внутри в зависимости от юзкейса, как и у массивов. Но это не важно, важна спецификация и поведение.

ChALkeR ★★★★★
()
Последнее исправление: ChALkeR (всего исправлений: 1)
Ответ на: комментарий от Vit

И в то же время:

Object.keys({'2': 1, '1': 1,'b': 1, 'a': 1});
["1", "2", "b", "a"]

+ на SO мужик пишет, что:

The order is essentially: integer-like Strings in ascending order, non-integer-like Strings in creation order, Symbols in creation order. Depending which function invokes this, some of these types may not be included.

http://stackoverflow.com/questions/5525795/does-javascript-guarantee-object-property-order/32149345#32149345

Жуть в общем :)

Ja-Ja-Hey-Ho ★★★★★
()
Последнее исправление: Ja-Ja-Hey-Ho (всего исправлений: 1)
Ответ на: комментарий от ChALkeR

Действительно:

When the [[OwnPropertyKeys]] internal method of O is called the following steps are taken:

  1. Let keys be a new empty List.
  2. For each own property key P of O that is an integer index, in ascending numeric index order
    • Add P as the last element of keys.
  3. For each own property key P of O that is a String but is not an integer index, in property creation order
    • Add P as the last element of keys.
  4. For each own property key P of O that is a Symbol, in property creation order
    • Add P as the last element of keys.
  5. Return keys.
static_lab ★★★★★
()
Ответ на: комментарий от Ja-Ja-Hey-Ho

Ага. В общем, там странный выверт с цифровыми ключами, остальное в порядке создания.

Но порядок точно не случайный. Конечно, в общем случае юзать подобное не рекомендуется, но если очень хочется то можно :)

Vit ★★★★★
()
Ответ на: комментарий от Vit

Но порядок точно не случайный.

Тут выше человек спеку зацитировал.

ChALkeR ★★★★★
()
Ответ на: комментарий от Vit

Справедливости для, порядок определён только начиная с ECMAScript 2015.

ChALkeR ★★★★★
()
const o = {
  field1: {},
  field2: {},
  fieldN: {}
}

const keys = Object.keys(o).sort()
slmgc
()
sort = function(object){
   var newObject = {}
   Object.keys(object).sort().forEach(function(name){newObject[name] = object[name]})
   return newObject
}

операция не деструктивна, и кажись не будет копировать из прототипов, только верхний уровень

xlsparse
()
Ответ на: комментарий от xlsparse

лол, феерический код. Даю подсказку: если вы пишете плагины к джумле на jQuery, это еще не значит, что вы знаете javascript ;)

anonymous
()
Ответ на: комментарий от Vit

Видимо v8 для оптимизации сортирует ключи которые можно привести к типу «number».

Int0l ★★
()
Последнее исправление: Int0l (всего исправлений: 1)

Яваскрипт на самом деле не такой сложный, как может показаться на первый момент. Почитайте какой нибудь полезный учебный материал, вот тут например есть неплохие книги https://codeby.net/forum/threads/knigi-po-js-i-jquery.38874/ . Чтобы понять такие основы, достаточно будет пары дней. Базовые знания по яваскрипту потом в будущем могут пригодится много где, не только при создании сайта

Hoopinni
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.