Javascript映射/减少以查找最新版本的数组项
我有一系列消息,我想将其缩减为仅包含这些消息的最新版本。
我已经使用普通的旧 JS 解决了这个问题: forEach 将每条消息放入以 为键的字典中id,覆盖以前的版本,然后通过将 dict 转换为数组Array.from(mathes.values)
但是,我想了解更多关于现代 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}]
任何人都可以帮我使用地图/减少来执行上述操作吗?
回答
一种选择是将对象映射到一个条目数组,这些条目将变成一个带有 的对象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);