我想按值“時間”對我的地圖進行排序。但我不知道該怎么做。我用谷歌搜索了很多,但我不能讓它作業。
也許有人可以幫助我。
我的地圖如下所示:
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
}
}
uj5u.com熱心網友回復:
地圖按照添加專案的順序進行迭代,要對地圖進行排序,您必須生成一個新地圖,以按排序順序添加專案。有關對地圖進行排序的更多詳細資訊,請參閱是否可以對 ES6 地圖物件進行排序?.
要生成新的排序地圖,您可以:
- 將地圖中的條目放入一個陣列中,例如
[...map]。每個條目將添加為一個陣列,其中 [0] 是鍵,[1] 是值。 - 根據值對時間屬性的陣列進行排序
.sort((a, b) => a[1].lastChat.time - b[1].lastChat.time)。 - 用結果生成一個新的 Map
以下是基于問題中提到的屬性的示例。
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,那么您需要為此使用附加邏輯擴展排序函式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/389057.html
標籤:javascript angularjs 排序 哈希图
