我有一个声明为 var cars = new Map<string, object>();
的 map , 其中string
是汽车的型号,object
有类似 year
的信息和 price
.
因此,Map
看起来像这样:
Map = [
'BMW' => {
id: 123,
price: 2000,
models: {...}
},
'Opel' => {
id: 1234,
price: 3500,
models: {...}
},
....
]
我想按 price
对所有整体进行排序字段(asc 或 desc)。
我想不出任何解决方案,因为遍历了 values
会丢失 key 和解决方案,就像我用 ...cars.entries()
读到的那样不适用,因为值不可迭代。
附言我目前正在使用 TypeScript,但 JS 的解决方案仍然适用。
编辑:我尝试将 map 转换为数组,如下所示:
const values = Array.from(this.cars.values());
values.sort((a, b) => {
return (a.price < b.price) ? -1 : 1;
});
但我在重建 map 以保留 keys
时遇到了一些麻烦……
最佳答案
Map
对象迭代并保持其元素按插入顺序排列。因此,只有为您创建新的 Map
的解决方案。我认为最简单的方法是将旧 map 转换为数组,对其进行排序,然后转换为新 map 。像这样:
let newMap = new Map([...map].sort(([k, v], [k2, v2])=> {
if (v.price > v2.price) {
return 1;
}
if (v.price < v2.price) {
return -1;
}
return 0;
}));
关于javascript - 在保留键的同时按值的属性对 Map 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48812295/