#javascript
#javascript
Вопрос:
У меня есть объект с цифровыми клавишами, сгруппированный по некоторому значению, поэтому он имеет вложенность:
const toSort = {
'3': {
"key1": "test",
"key2": "test",
},
'testVslue': {
'1': {
"key1": "test",
"key2": "test",
},
'2': {
"key1": "test",
"key2": "test",
},
},
'4': {
"key1": "test",
"key2": "test",
},
}
Как я могу отсортировать объект по росту ключа, несмотря на вложенность, вот так:
const sorted = {
'testVslue': {
'1': {
"key1": "test",
"key2": "test",
},
'2': {
"key1": "test",
"key2": "test",
},
},
'3': {
"key1": "test",
"key2": "test",
},
'4': {
"key1": "test",
"key2": "test",
},
}
Комментарии:
1. Является ли вложенность только на один уровень глубиной?
2. @CKE да, только один
3. какая польза, поскольку элементы объекта доступны напрямую по их свойствам? их назначение памяти в любом случае может отличаться в зависимости от потребностей хост-системы
4. Мне нужно визуализировать данные по порядку в списке
5. если сортировать по алфавиту, порядок будет
3 4 testValue
, это будет нормально?
Ответ №1:
https://exploringjs.com/es6/ch_oop-besides-classes.html#_traversal-order-of-properties
Собственные ключи свойств:
Извлекает ключи всех собственных свойств объекта в следующем порядке:
- Во-первых, строковые ключи, которые являются целочисленными индексами (что это такое, объясняется в следующем разделе), в порядке возрастания числового порядка.
- Затем все остальные строковые ключи в том порядке, в котором они были добавлены к объекту.
- Наконец, все символьные ключи в том порядке, в котором они были добавлены к объекту.
console.log(toSort);
// 3 4 testValue
const sorted = {};
Object.keys(toSort).sort().forEach(function(key) {
sorted[key] = toSort[key];
});
console.log(sorted);
// 3 4 testValue
итак, другой способ — разделить его.
const sortedInteger = {};
const sortedString = {};
Object.keys(toSort).sort().forEach(function(key) {
if (isNaN(key)) {
sortedString[key] = toSort[key];
}
else {
sortedInteger[key] = toSort[key];
}
});
console.log(sortedString);
console.log(sortedInteger);
или как насчет использования Map
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
const sortedIntegerArray = [];
let sortedMap = new Map()
Object.keys(toSort).sort().forEach( (key) => {
if (isNaN(key)) {
sortedMap.set(key, toSort[key])
}
else {
sortedIntegerArray.push(key);
}
});
sortedIntegerArray.forEach( (key) => {
sortedMap.set(key, toSort[key])
});
console.log(sortedMap)
// Map {
// 'testValue' => {
// '1': { key1: 'test', key2: 'test' },
// '2': { key1: 'test', key2: 'test' }
// },
// '3' => { key1: 'test', key2: 'test' },
// '4' => { key1: 'test', key2: 'test' }
// }