Привет! Сегодня я буду обсуждать сортировку объектов 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 возвращают длинные массивы данных. Если вы используете функцию поиска для доступа к данным, сложность будет n², что означает, что для решения этой проблемы вам потребуется в 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