Привет! Сегодня я буду обсуждать сортировку объектов Javascript. Прежде всего, что отличает массив от объекта? На заднем плане они по сути одинаковы, так как оба созданы из дескрипторов.

Пример:

const a = {
    "a":1,
    "b":2,
    "c":3
}
console.log(JSON.stringify(Object.entries(a)))
// [["a",1],["b",2],["c",3]]


const b = ["Alfa","Bravo","Charlie"]

console.log(JSON.stringify(Object.entries(b)))
// [["0","Alfa"],["1","Bravo"],["2","Charlie"]]

Если у вас возникли проблемы с производительностью при работе с длинным массивом и вы не знаете, к какому индексу в данных вам нужно получить доступ, использование объекта может быть почти в 10 раз быстрее (как видно из StackOverflow).

Вот результат фотографий:

Если вам нужно отсортировать массив, вложенный в объект, и этот объект имеет свойства ID, вы можете отсортировать объект с небольшим отличием.

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

Однако, когда вы задаете свойства объекта с числовыми дескрипторами, Javascript автоматически сортирует их в порядке возрастания, и вы не можете сортировать объекты. Вчера целый день пытался решить эту проблему :)

Итак, зачем нам нужны объекты вместо массивов?

Нам нужно использовать объекты для устранения проблем, когда API или WebSocket возвращают длинные массивы данных. Если вы используете функцию поиска для доступа к данным, сложность будет , что означает, что для решения этой проблемы вам потребуется в 2+ раза более высокая производительность.

Преобразовав массив в объект, мы можем избежать этой проблемы.

Но как мы можем отсортировать этот объект?

Мы можем отсортировать объект с помощью entries и fromEntries.

Сначала нам нужно создать объект со строковыми значениями, а не просто числами, затем преобразовать его в записи, использовать метод sort и, наконец, использовать метод fromEntries.

Покажем на примере:

// create object without int
const a = {
    "1_key":1,
    "3_key":2,
    "2_key":3
}
console.log(a)
// { '1_key': 1, '5_key': 2, '2_key': 3 }

// create entries 
const entriesA= Object.entries(a)

console.log(entriesA)
// [ [ '1_key', 1 ], [ '5_key', 2 ], [ '2_key', 3 ] ]

// sorted entries
const sortedEntriesA = entriesA.sort((a,b) => a[0] > b[0] ? 1 : -1)

console.log(sortedEntriesA)
// [ [ '1_key', 1 ], [ '2_key', 3 ], [ '5_key', 2 ] ]

// adding 4_key properties with sorted object.
sortedEntriesA.splice(2,0,["4_key",5])

console.log(sortedEntriesA)
// [ [ '1_key', 1 ], [ '2_key', 3 ], [ '4_key', 5 ], [ '5_key', 2 ] ]

// conver to object again
const sortedA = Object.fromEntries(sortedEntriesA)

console.log(sortedA)
// { '1_key': 1, '2_key': 3, '4_key': 5, '5_key': 2 }

// directly reach object when you need to update
console.log(sortedA["4_key"]) // 5

// print all of sorted data
console.log(Object.values(sortedA)) // [ 1, 3, 5, 2 ]

Когда вы это сделаете, производительность ваших данных будет улучшена.

Благодаря чтению.

Мои профили: https://bento.me/yagiz