gpt4 book ai didi

javascript - 通过在 Javascript 中保持最后,按唯一 ID 对数组进行排序

转载 作者:行者123 更新时间:2023-11-30 07:01:38 25 4
gpt4 key购买 nike

我正在尝试从具有多个相同 ID 的数组中创建唯一的 id 列表。但我希望它保留最后一个,而不是第一个。我这里的代码保留第一个唯一对象。有没有我可以在这里使用的 Array.findLastIndex()。我搜索了但找不到类似的问题。

[{id:2,name:'first'}, {id:2,name:'second'}, {id:3}]
.filter((v, i, a) => a.findIndex((t) => (t.id === v.id)) === i)

该代码返回:

[{id: 2, name: "first"}, {id: 3}]

但是我想要:

[{id: 2, name: "second"}, {id: 3}]

我已经写了下一个给出结果的,但理想情况下我不想复制和反转我的数组两次,这对于长数组来说效率很低。

[{id:2,name:'first'}, {id:2,name:'second'}, {id:3}]
.slice().reverse()
.filter((v, i, a) => a.findIndex((t) => (t.id === v.id)) === i)
.reverse()

最佳答案

您可以将它们存储在 Map id => 对象中,然后将值拉回:

arr = [{id:2,name:'first'},{id:2,name:'second'},{id:3}]

result = [...new Map(arr.map(x => [x.id, x])).values()]

console.log(result)

由于 Map 构造函数会覆盖现有值,因此您会自动获得最后一个值。

如注释中所述,在此之后,结果元素将按第一个 出现的顺序排序,而不是按最后一个出现的顺序排序:

arr = [
{id:3,name:'first 3'},
{id:2,name:'first 2'},
{id:2,name:'second 2'},
{id:3,name:'second 3'}]

result = [...new Map(arr.map(x => [x.id, x])).values()]

console.log(result)

如果您还想按 id 排序,如您的标题所示,则添加

.sort((a, b) => a.id - b.id)

以上。

关于javascript - 通过在 Javascript 中保持最后,按唯一 ID 对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56796619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com