Javascript删除具有重复属性的数组对象,同时保留最新的事件

时间:2019-03-13 11:15:40

标签: javascript arrays filter duplicates

我为此进行了大量搜索,但找不到符合我要求的内容。

我想删除所有重复项,但保留最后一个条目而不是第一个条目。

数组已经预先排序,我不想弄乱排序

所以看起来像这样:

[{
    name:"Joe",
    status:"foo1" },
  {
    name:"Joe",
    status:"foo2"},
  {
     name:"Vani",
    status:"foo5"
  }]

预期输出如下:

  [{
    name:"Joe",
    status:"foo2"},
  {
     name:"Vani",
    status:"foo5"
  }]

如果有人能帮助我,我会很感激!

3 个答案:

答案 0 :(得分:4)

您可以简单地使用reduce

let arr = [{ name:"Joe", status:"foo1" }, { name:"Joe", status:"foo2"}, { name:"Vani", status:"foo5" }]

let op = arr.reduce((op,inp)=>{
  op[inp.name] = inp
  return op
},{})

console.log(Object.values(op))

答案 1 :(得分:1)

您可以使用ES6 Map。从Docs起:

  

Map对象保存键值对,并记住键的原始插入顺序。任何值(对象值和原始值)都可以用作键或值。

const data = [
  { name:"Joe", status:"foo1" },
  { name:"Joe", status:"foo2" },
  { name:"Vani", status:"foo5" }
];

const removeDupes = (arr, map = new Map()) => {
  arr.forEach(o => map.set(o.name, o));

  return [...map.values()];
};

console.log(removeDupes(data));
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 2 :(得分:0)

尝试使用简单的forEach

const arr = [{ name:"Joe", status:"foo1" }, { name:"Joe", status:"foo2"}, { 
    name:"Vani", status:"foo5" }];

let result = {};
arr.forEach((val) => { result[val.name] = val; });

console.log(Object.values(result));

希望这对您有帮助...