【问题标题】:Remove object, with a common property, from array从数组中删除具有公共属性的对象
【发布时间】:2021-04-17 13:49:13
【问题描述】:

如果在该数组中的另一个对象中找到该对象中的单个属性,是否有办法从该数组中删除该对象?

const arr = [{
  car: 'bmw',
  notimportant: 'bla bla',
},{
  car: 'audi',
  notimportant: 'bli bli',
},{
  car: 'bmw',
  notimportant: 'ble ble',
},{
  car: 'golf',
  notimportant: 'blo blo',
}]

我还想添加一个计数器,记录有多少重复项

预期结果:

[{
  car: 'bmw',
  count: 1,
  notimportant: 'bla bla',
},{
  car: 'audi',
  count: 0,
  notimportant: 'bli bli',
},{
  car: 'golf',
  count: 0,
  notimportant: 'blo blo',
}]

【问题讨论】:

  • 你尝试过什么吗?什么不起作用?
  • @NinaScholz 我不知道从哪里开始得到这个结果,我过去尝试过 new Set 并且当对象相同时效果很好,但是什么时候只有一个属性我不知道如何比较一下

标签: javascript arrays ecmascript-6 ecmascript-5 ecmascript-2016


【解决方案1】:

您可以使用 Array#reduce 和一个对象来存储每辆车的值。

const arr = [{
  car: 'bmw',
  notimportant: 'bla bla',
},{
  car: 'audi',
  notimportant: 'bli bli',
},{
  car: 'bmw',
  notimportant: 'ble ble',
},{
  car: 'golf',
  notimportant: 'blo blo',
}];
const res = Object.values(arr.reduce((acc,curr)=>{
  ++(acc[curr.car] = acc[curr.car] || {...curr, count: -1}).count;
  return acc;
}, {}));
console.log(res);

【讨论】:

    【解决方案2】:

    您可以使用lodash 的 uniqBy 函数通过指定键来删除数组中的重复项:

    _.uniqBy(arr, (e) => {
      return e.car;
    });
    

    Here's the doc如果你有兴趣

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-11
      • 2015-12-14
      • 1970-01-01
      • 2021-07-17
      • 1970-01-01
      • 2013-05-05
      • 2013-08-10
      相关资源
      最近更新 更多