Как отсортировать массив с дубликатами?

Есть массив в котором есть дубликаты ...

Как можно удалить их ,

Я пытался сделать так :

let arr = [];

arr[0] = {
  "name": "john",
  "family": "unitas"
}

arr[1] = {
  "name": "linda",
  "family": "gamilton"
}

arr[2] = {
  "name": "john",
  "family": "unitas"
}

arr[3] = {
  "name": "yuriy",
  "family": "kravcov"
}

for (item in arr) {
  let p = document.createElement("p");
  p.innerHTML = arr[item].name + " " + arr[item].family;
  document.body.append(p)

}

const newArr = arr.filter(function(item, index) {
  return arr.indexOf(item) === index;
});

console.log(newArr)

Но выводится всё равно тот же самый массив ...

let nr = [...new Set(arr)]; тоже не работает

let nr = Array.from(new Set(arr)); тоже не работает


Ответы (2 шт):

Автор решения: Сергей Бувака

Храните ваши данные в Set. Set не позволяет хранить дубликаты и при добавлении в него элемента, который уже существует он просто игнорирует его. https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Set

→ Ссылка
Автор решения: Igor

У Вас в массиве - объекты, каждый из которых создан с помощью своих собственных { ... }. То есть все объекты разные. arr.indexOf(item) ищет ссылку на объект, эта функция понятия не имеет о том, что у объекта есть свойства, значения которых равны свойствам с такими же именами в другом объекте.

let arr = [{
    "name": "john",
    "family": "unitas"
  },
  {
    "name": "linda",
    "family": "gamilton"
  },
  {
    "name": "john",
    "family": "unitas"
  },
  {
    "name": "yuriy",
    "family": "kravcov"
  }];

const newArr = arr.filter(function(item, index) {
  let index1 = arr.findIndex(function(item1) {
    let sameName = item1.name == item.name;
    let sameFamily = item1.family == item.family;
    return sameName && sameFamily;
  });
  return index1 == index;
});

console.log(newArr);

→ Ссылка