如何对地图中的特定值进行排序

How to sort a specific value in a map

我想按“时间”值对我的地图进行排序。但我不知道该怎么做。我在谷歌上搜索了很多,但无法正常工作。

也许有人可以帮助我。

我的地图是这样的:

this.map.set(userData.data()['uid'], { data: userData.data(), lastChat: {message: messages[0].msg, time: messages[0].time}});

uid: {
      data: sampleData,
      lastChat: {
                 message: "A sample text"
                 time: 1640063014931
      }
}

地图按项目添加的顺序迭代,要对地图进行排序,您必须生成一个新地图,按排序顺序添加项目。可以在 .

中找到有关对 Map 进行排序的更多详细信息

要生成新的排序地图,您可以:

  1. 将地图中的条目放入数组中,例如[...map]。每个条目都将添加为一个数组,其中 [0] 是键,[1] 是值。
  2. 根据值 .sort((a, b) => a[1].lastChat.time - b[1].lastChat.time).
  3. 在时间 属性 对数组进行排序
  4. 使用结果生成新地图

下面是基于问题中提到的 属性 的示例。

var map = new Map();
map.set('0001', {lastChat: {message: 'test', time: 1640063014931}});
map.set('0002', {lastChat: {message: 'test', time: 1640063014930}});

var sortedMap = new Map([...map].sort((a, b) => a[1].lastChat.time - b[1].lastChat.time));

console.log(sortedMap.entries())
//Output : MapIterator {'0002' => {…}, '0001' => {…}}

如果 lastChat 可以为 null,那么您需要使用附加逻辑来扩展排序功能。