通过在Javascript中保留last,按唯一id对数组排序

通过在Javascript中保留last,按唯一id对数组排序,javascript,arrays,Javascript,Arrays,我试图从具有多个相同id的数组中创建唯一id列表。但我希望它保留最后一个,而不是第一个。我这里的代码保留了第一个唯一的对象。这里有Array.findlastinex可以使用吗。我搜索了一下,但找不到类似的问题 [{id:2,name:'first'}, {id:2,name:'second'}, {id:3}] .filter((v, i, a) => a.findIndex((t) => (t.id === v.id)) === i) 该代码返回: [{id: 2, n

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

[{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()

您可以反转数组并获取第一个找到的uniqe值。过滤后,反转结果集

var数组=[{id:2,名称:'first'},{id:2,名称:'second'},{id:3}], 唯一=数组 颠倒 .filters=>{id}=>!s、 hasid&s.addednew集 颠倒
console.logunique 您可以反转数组并获取第一个找到的uniqe值。过滤后,反转结果集

var数组=[{id:2,名称:'first'},{id:2,名称:'second'},{id:3}], 唯一=数组 颠倒 .filters=>{id}=>!s、 hasid&s.addednew集 颠倒 console.logunique 一种解决方案是使用id属性作为键生成对象,同时覆盖以前的值。然后可以在生成的对象上使用:

设arr=[ {id:2,名称:'first'}, {id:2,名称:'second'}, {id:3} ]; 设res=Object.valuesarr.reduceacc,obj=>acc[obj.id]=obj,acc,{}; console.logres; .as控制台{背景颜色:黑色!重要;颜色:石灰;} .as console wrapper{max height:100%!important;top:0;}一种解决方案是使用id属性作为键生成对象,同时覆盖以前的值。然后可以在生成的对象上使用:

设arr=[ {id:2,名称:'first'}, {id:2,名称:'second'}, {id:3} ]; 设res=Object.valuesarr.reduceacc,obj=>acc[obj.id]=obj,acc,{}; console.logres; .as控制台{背景颜色:黑色!重要;颜色:石灰;} .as console wrapper{max height:100%!important;top:0;}您可以将它们存储在Map id=>对象中,然后将值拉回来:

arr=[{id:2,名称:'first'},{id:2,名称:'second'},{id:3}] 结果=[…new Maparr.mapx=>[x.id,x].values] console.logresult您可以将它们存储在Map id=>对象中,然后将值拉回来:

arr=[{id:2,名称:'first'},{id:2,名称:'second'},{id:3}] 结果=[…new Maparr.mapx=>[x.id,x].values]
console.logresult我最喜欢Shidersz的答案,但还有一种可能性:

设arr=[ {id:2,名称:'first'}, {id:2,名称:'second'}, {id:3} ]; 设res=arr.filterv,i=>{ 对于设j=i+1;jconsole.logres 我最喜欢Shidersz的答案,但还有一种可能性:

设arr=[ {id:2,名称:'first'}, {id:2,名称:'second'}, {id:3} ]; 设res=arr.filterv,i=>{ 对于设j=i+1;jconsole.logres;这是一个iife内部筛选器吗?@uniqiIdentifierAssignedAtBirth,对,它需要一个集合来跟踪SEED id。这是一个iife内部筛选器吗?@uniqiIdentifierAssignedAtBirth,对,它需要一个集合来跟踪SEED id。这种方法可能会改变顺序,因为插入顺序。@NinaScholz:对,添加了一个关于这一点的注释。我不清楚OP的顺序。这种方法可能会改变顺序,因为插入顺序。@NinaScholz:对,添加了一条关于这一点的注释。我不清楚这次行动的目的是什么。