使用键从数组中删除重复对象

Remove duplicate objects from an array with Keys

如何通过属性筛选对象数组?例如在这个数组中,如果两个或多个对象具有相同的属性,如 namelastname 我想删除其中一个并只留下唯一的一个数组。示例 arr:

    [ {name: "George", lastname: "GeorgeLast", age: 12},
      {name: "George", lastname: "GeorgeLast", age: 13},
      {name: "Bob", lastname: "GeorgeLast", age: 12}] 

结果应该是

 [ {name: "George", lastname: "GeorgeLast", age: 13},
   {name: "Bob", lastname: "GeorgeLast", age: 12}]

 [ {name: "George", lastname: "GeorgeLast", age: 12},
   {name: "Bob", lastname: "GeorgeLast", age: 12}]

应用this answer中所示的技术,即:

function onlyUnique(value, index, self) {
  return self.indexOf(value) === index;
}

...但是使用 findIndex 和一些标准而不仅仅是 indexOf.

let people = [
  { name: "George", lastname: "GeorgeLast", age: 12 },
  { name: "George", lastname: "GeorgeLast", age: 13 },
  { name: "Bob", lastname: "GeorgeLast", age: 12 }
]

let result = people.filter(
  (person, index) => index === people.findIndex(
    other => person.name === other.name
      && person.lastname === other.lastname
  ));
console.log(result);

至于留12岁的乔治还是留13岁的乔治,那是findIndex如何运作的问题,return [=28]也是如此=]第一个个匹配元素。因此,在您的示例中,它将保留 12 岁的乔治。

另一个解决方案。
在这里你不需要遍历列表 n*n/2 次(如果我没记错的话)。
另一方面,这个看起来不那么简洁并且占用更多内存。
使用您喜欢的任何一个。

const arr = [
  {name: "George", lastname: "GeorgeLast", age: 12},
  {name: "George", lastname: "GeorgeLast", age: 13},
  {name: "Bob", lastname: "GeorgeLast", age: 12}
];

const obj = {}
arr.forEach(v => {
  if (!obj[v.name]) {
    obj[v.name] = {}
  }
  if (!obj[v.name][v.lastname]) {
    obj[v.name][v.lastname] = v;
  }
})

const result = [];
Object.values(obj).forEach(nameObj =>
  Object.values(nameObj).forEach(surnObj => result.push(surnObj))
);

console.log(result)