javascript 根据对象属性查找(并删除)对象数组中的重复项

uplii1fm  于 12个月前  发布在  Java
关注(0)|答案(2)|浏览(110)

我想删除对象数组中的重复项,具体取决于对象属性。

  • 简单的例子:* 假设你有一个数组,比如:
[
 { 
   name: 'alice',
   something: 123
 },
 {
   name: 'alice',
   something: 321
 },
 {
  name: 'bob',
  something: 213
 }
]

字符串
我想删除与name具有相同值的对象,但我想通过一些自定义计算来决定删除哪个对象(例如,保留something值较大的对象)。
我能够适应在find duplicate values in a JavaScript array接受的答案,但不工作,以及超过2个重复。

2q5ifsrm

2q5ifsrm1#

你可以尝试使用reduce和object,根据你的条件设置属性。
然后通过Object.values将其转换为数组。

var arr = [
 { 
   name: 'alice',
   something: 123
 },
 {
   name: 'alice',
   something: 321
 },
 {
  name: 'bob',
  something: 213
 }
];

var res = arr.reduce( (acc,b) => {
 if ((acc[b.name] && acc[b.name].something < b.something) || !acc[b.name]) {
  acc[b.name] = b;
 }
 return acc;
}, {});
var newArr = Object.values(res);
console.log(newArr);

字符串

yjghlzjz

yjghlzjz2#

您可以使用哈希表作为对同名对象的引用。

var array = [{ name: 'alice',something: 123 }, { name: 'alice', something: 321 }, { name: 'bob', something: 213 }],
    result = array.reduce(function (hash) {
        return function (r, a) {
            if (!(a.name in hash)) {
                hash[a.name] = r.push(a) - 1;
                return r;
            }
            if (r[hash[a.name]].something < a.something) {
                r[hash[a.name]] = a;
            }
            return r;
        };
    }(Object.create(null)), []);
  
console.log(result)

字符串

相关问题