Как отсортировать массив с дубликатами?
Есть массив в котором есть дубликаты ...
Как можно удалить их ,
Я пытался сделать так :
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
У Вас в массиве - объекты, каждый из которых создан с помощью своих собственных { ... }. То есть все объекты разные. 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);