【问题标题】:Javascript remove array objects with duplicate properties while keeping the latest occuranceJavascript 删除具有重复属性的数组对象,同时保持最新出现
【发布时间】:2019-08-04 01:18:18
【问题描述】:

我为此搜索了很多,但找不到任何符合我要求的内容。

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

数组已经预排序我不想乱排序

所以它看起来像这样:

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

预期的输出如下:

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

如果有人可以帮助我,我将不胜感激!

【问题讨论】:

  • 也许尝试反转数组,然后尝试任何其他保留第一个值的方法。然后你可以把它倒过来
  • 欢迎来到 Stack Overflow!请使用tour(您将获得徽章!)并通读help center,尤其是How do I ask a good question? 您最好的选择是进行研究,search 以获取有关 SO 的相关主题,然后试一试. 如果您在进行更多研究和搜索后遇到困难并且无法摆脱困境,请发布您的尝试minimal reproducible example,并具体说明您遇到的问题。人们会很乐意提供帮助。
  • 数组已经预排序我不想乱排序! , 我会在上面添加这个

标签: javascript arrays filter duplicates


【解决方案1】:

您可以简单地使用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))

【讨论】:

  • 不保证Object.values() 返回的数组中的值将保持与输入数组中相同的顺序。
【解决方案2】:

你可以使用 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; }

【讨论】:

    【解决方案3】:

    尝试使用简单的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));
    

    希望这会有所帮助...

    【讨论】:

      猜你喜欢
      • 2015-12-14
      • 2017-12-31
      • 2021-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-28
      相关资源
      最近更新 更多