Вы можете сначала отсортировать массив, а затем использовать map
.После сортировки все объекты будут отсортированы в порядке возрастания имени.Затем используйте map
, который вернет новый массив, и при возврате проверьте, совпадает ли name
в текущем объекте с предыдущим объектом.Если это так, то добавьте дубликат ключа и присвойте ему значение
if (index !== 0 && item.name == k[index - 1].name) {
В этой строке пропущена проверка первого объекта в отсортированном массиве, потому что с предыдущим объектом копировать нечего, а item.name == k[index - 1].name
проверяетесли имя совпадает с предыдущим объектом
let arr = [{
name: 'abc',
age: 20,
},
{
name: 'xyz',
age: 25,
},
{
name: 'pqr',
age: 22,
},
{
name: 'abc',
age: 27,
},
{
name: 'abc',
age: 26,
},
];
let k = arr.sort(function(a, b) {
return a.name.localeCompare(b.name);
});
let z = k.map(function(item, index) {
if (index !== 0 && item.name == k[index - 1].name) {
return {
name: item.name,
age: item.age,
duplicate: true
}
} else {
return {
name: item.name,
age: item.age
}
}
});
console.log(z)