【问题标题】:Removing all objects that have a property/value duplicate BUT the last [duplicate]删除所有具有重复属性/值但最后一个 [重复] 的对象
【发布时间】:2019-12-23 17:33:21
【问题描述】:

我需要遍历一个对象数组,其中每个对象都有一个 email 属性。我的目标是遍历数据 (CSV),如果任何记录具有相同的电子邮件,我需要删除除最后一个之外的所有记录,因为这将是我最终需要更新的值。我似乎无法做到这一点。

我曾尝试使用 .find,但从未完全成功。我觉得我需要添加它,但我不知道是什么。

let arr = [
  {name: 'stefano', email: 'stef@mail.com'},
  {name: 'steve', email: 'cuck@mail.com'},
  {name: 'weave', email: 'stef@mail.com'},
  {name: 'peave', email: 'luck@mail.com'}
  ];

 let keepLast = arr.find( (obj,idx) => {
    let found = 0;
    if(obj.email === 'stef@mail.com') {
      ++found;
    }
    if(found > 1) {
      // Somehow remove the previous iteration catch on match
    }
  });

这是关于我的位置。我觉得我需要以某种方式记住最后一个索引,以便我知道一旦找到另一个索引就将其删除。

【问题讨论】:

  • @HereticMonkey 感谢您的发现。我现在会通读它,如果是这样的话,我会删除它。我找了一会儿,但很难找到一个专门只保留最后一个副本的。

标签: javascript arrays object duplicates


【解决方案1】:

我会将reduce 放入电子邮件索引的对象中,从而覆盖该电子邮件键处的前一个对象(如果存在)。然后只需获取该对象的值:

let arr = [
  {name: 'stefano', email: 'stef@mail.com'},
  {name: 'steve', email: 'cuck@mail.com'},
  {name: 'weave', email: 'stef@mail.com'},
  {name: 'peave', email: 'luck@mail.com'}
];

const output = Object.values(
  arr.reduce((a, obj) => {
    a[obj.email] = obj;
    return a;
  }, {})
);
console.log(output);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 2017-12-31
    • 2015-12-14
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多