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);


以上是Javascript映射/减少以查找最新版本的数组项的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>