簡體   English   中英

Javascript map/reduce 以查找最新版本的數組項

[英]Javascript map/reduce to find newest version of array items

我有一系列消息,我想將其縮減為僅包含這些消息的最新版本。

我已經用普通的舊 JS 解決了這個問題,使用:forEach 將每條消息放入由id鍵入的字典中,覆蓋以前的版本,然后通過Array.from(mathes.values)將 dict 轉換為數組

但是,我想了解更多關於現代 ES JS 的信息——並且懷疑有一個聰明的 map/reduce 可以解決我的問題。

const messages = []
messages.push({id: 1, ver:1})
messages.push({id: 2, ver:1})
messages.push({id: 3, ver:1})
messages.push({id: 1, ver:2})
messages.push({id: 2, ver:2})
messages.push({id: 2, ver:3})

const newest = [] // some fancy map/reduce

console.log(newest)
// [{id: 1, ver:2},
// {id: 2, ver:3},
// {id: 3, ver:1}]

任何人都可以幫我使用 map/reduce 來執行上述操作嗎?

一種選擇是將 map 對象轉換為條目數組,然后將其轉換為 object 和Object.fromEntries ,從而僅保留最新的 ID:

 const arr = [ {id: 1, ver:1}, {id: 2, ver:1}, {id: 3, ver:1}, {id: 1, ver:2}, {id: 2, ver:2}, {id: 2, ver:3}, ]; const dedup = Object.values( Object.fromEntries( arr.map(item => [item.id, item]) ) ); console.log(dedup);

簡單的減少檢查以查看版本是否更大。 創建 object 后,只需從中獲取值。

 const messages = [] messages.push({id: 1, ver:1}) messages.push({id: 2, ver:1}) messages.push({id: 3, ver:1}) messages.push({id: 1, ver:2}) messages.push({id: 2, ver:2}) messages.push({id: 2, ver:3}) const newest = Object.values(messages.reduce((acc, item) => { if (.acc[item.id] || acc[item.id].ver < item.ver ) { acc[item;id] = item; } return acc, }; {})). console;log(newest);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM