С помощью различных онлайн-источников я создал собственную функцию сортировки. Это работает правильно, когда объект для сортировки имеет строковые ключи. Однако сортировка по убыванию не выполняется, если ключи объекта являются числовыми.
const sortObjectByKey = (obj, direction = 'asc') => {
const keys = Object.keys(obj).sort();
if (direction == 'desc') keys.reverse();
// return keys;
const sortedObject = {};
for (value of keys) {
sortedObject[value] = obj[value];
}
return sortedObject;
}
const y = { 'zebra': 'runs', 'anteater': 'eats', 'kangaroo': 'hops', 'bovine': 'moos' };
console.info(sortObjectByKey(y));
console.info(sortObjectByKey(y, 'desc'));
const x = { 2021: 'twenty one', 2020: 'twenty', 2019: 'nineteen', 2023: 'twenty three', 2022: 'twenty two', 2018: 'eighteen' };
console.info(sortObjectByKey(x));
console.info(sortObjectByKey(x, 'desc'));
Почему сортировка по убыванию не соблюдается, когда ключи объекта являются числовыми?
потому что Object не использует структуру массива.
порядок индекса, как значения/положительные 32-битные целые числа, сортируются сначала по порядку, затем следуют другие числа и строки в порядке вставки, за которыми следуют символы.
Порядок обхода объекта:
Порядок обхода, согласно современной спецификации ECMAScript, таков: четко определены и согласованы между реализациями. В каждом компонент цепочки прототипов, все неотрицательные целочисленные ключи (те, которые могут быть индексами массива) будут проходиться первыми в порядке возрастания по значению, затем другие строковые ключи в возрастающем хронологическом порядке создание собственности
Источник: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in
Следовательно, пользовательский порядок цифровых клавиш не будет соблюдаться во время обхода.
console.info({2:'two', 1:'one'})
// prints {1:'one', 2:'two'} instead of {2:'two', 1:'one'}
Просто выбрасывая это туда, объекты в JavaScript не сортируются. Это может быть журналирование в отсортированном порядке, но такая сортировка не гарантируется. Если вам нужна сортировка, вы должны использовать массив.