关注How can I add a key/value pair to a JavaScript object?和Best way to store a key=>value array in JavaScript?,我构建了我的键/值地图(对象)。
我在下面构建它,MyFunc
返回一个数组:
let MyMap = {}; // object
for(let i = 0; i < MyContainer.length; i++)
{
// create the key (id of current element) and set its value as array of elements (result from MyFunc)
await MyFunc(MyContainer[i]).then((response) => MyMap[MyContainer[i].id] = response);
}
MyMap
看起来像这样:
MyMap =
{
1: [Object, Object, Object, …] // 13 elements
2: [Object, Object, Object, …] // 7 elements
3: [Object, Object, Object, …] // 4 elements
4: [Object]
5: [Object]
6: [Object, Object, Object, …] // 5 elements
7: [Object, Object, Object, …] // 9 elements
}
我想迭代我的地图(键),但是从具有最小值的键(最小的数组)开始。
因此,我想:
4
的元素,并执行填充(具有最小的数组:1个元素)5
的元素,并执行填充3
6
1
的元素并执行填充(具有最大数组:13个元素)既然myMap
是一个对象,那么我就无法对其进行排序。
我怎样才能做到这一点?
答案 0 :(得分:2)
最终,您无法使用对象,因为无法保证键的顺序。
你可以:
Object.keys(obj)
将对象的密钥作为Array
Array
个对象,数组中的每个项目都是原始对象的键/值对。Array
的长度对item.value
个对象进行排序。在这种情况下,item.value
是您原始对象的Array
s
const obj = {
"1": [1, 2, 3],
"2": [1],
"3": [1, 2],
"4": [1, 2, 3, 4]
};
// Transform object into a nested array
// Each array item contains the value of a key of your original object,
// which itself is an Array
const arr = Object.keys(obj).reduce((arr, key) => {
arr.push({ key: key, value: obj[key] });
return arr;
}, [])
// Sort the nested Array based on the length of each item
const sortedArr = arr.sort((a, b) => a.value.length - b.value.length);
console.log(sortedArr);
&#13;
const obj = {
"1": [1, 2, 3],
"2": [1],
"3": [1, 2],
"4": [1, 2, 3, 4]
};
const sortedArr = Object.keys(obj).reduce((arr, key) => {
arr.push({ key: key, value: obj[key] });
return arr;
}, [])
.sort((a, b) => a.value.length - b.value.length)
console.log(sortedArr);
&#13;