javascript - 在保留键的同时按值的属性对 Map 进行排序

标签 javascript sorting dictionary es6-map

我有一个声明为 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/

相关文章:

javascript - instanceof 接受一个字符串作为我的 Type 类 Javascript 的实例

javascript - 每个选项卡的 Ajax 调用函数

c# - 在 C# 中对列表进行排序

objective-c - 路由我 : Location & Screen Position

python - 根据一些键/值对从字典列表中合并字典

javascript - UIWebview javascript 仅在发布版本中失败

javascript - 如何实现html多选选项复选框的全选功能?

jQuery parseJson 对象方向(IE 和 Firefox 与 Opera 和 Chrome)

shell - 如何按文件大小排序查找结果

ios - 按原始顺序获取数组中字典的键