如何对地图中的特定值进行排序
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 进行排序的更多详细信息
要生成新的排序地图,您可以:
- 将地图中的条目放入数组中,例如
[...map]
。每个条目都将添加为一个数组,其中 [0] 是键,[1] 是值。
- 根据值
.sort((a, b) => a[1].lastChat.time - b[1].lastChat.time)
. 在时间 属性 对数组进行排序
- 使用结果生成新地图
下面是基于问题中提到的 属性 的示例。
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,那么您需要使用附加逻辑来扩展排序功能。
我想按“时间”值对我的地图进行排序。但我不知道该怎么做。我在谷歌上搜索了很多,但无法正常工作。
也许有人可以帮助我。
我的地图是这样的:
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]
。每个条目都将添加为一个数组,其中 [0] 是键,[1] 是值。 - 根据值
.sort((a, b) => a[1].lastChat.time - b[1].lastChat.time)
. 在时间 属性 对数组进行排序
- 使用结果生成新地图
下面是基于问题中提到的 属性 的示例。
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,那么您需要使用附加逻辑来扩展排序功能。