Удаление определенных дубликатов из массива Javascript

#javascript #arrays #javascript-objects

#javascript #массивы #javascript-объекты

Вопрос:

У меня есть массив, подобный этому

 const ex = [
    {
        name: 'John',
        sender: "12345678",
        receiver: {
            name: "simi",
            age: 20,
            city: "New York"
        },
         time: 12:30 am
    },
    {
        name: 'Jane',
        sender: {
            name: "simi",
            age: 20,
            city: "New York"
        },
        receiver: "12345678",
        time: 1:00 pm
    }
]
  

В этом массиве значение свойства отправителя в первом объекте равно значению свойства получателя во втором объекте.
Есть ли способ, которым я могу проверить и создать только одно вхождение этого значения, то есть только один объект, в котором присутствует значение

Комментарии:

1. что означает это значение значение объекта или значение свойства?

2. значение свойства.

Ответ №1:

Попробуйте это:

 const ex = [
    {
        name: 'John',
        sender: "12345678",
        receiver: {
            name: "simi",
            age: 20,
            city: "New York"
        },
         time: "12:30 am"
    },
    {
        name: 'Jane',
        sender: {
            name: "simi",
            age: 20,
            city: "New York"
        },
        receiver: "12345678",
        time: "1:00 pm"
    }
]

let map = {}
ex.forEach(e => {
     let obj = null;
     if(e.sender instanceof Object) 
          obj = e.sender;
     else if(e.receiver instanceof Object) 
          obj = e.receiver;
     if(!obj) return;
     let key = obj.name obj.age obj.city;
     if(!map[key])
          map[key] = e;
});

console.log(Object.values(map));  

Комментарии:

1. Спасибо за ваш ответ, что, если я все еще хочу иметь его в массиве. Допустим, есть возможность иметь несколько подобных сценариев

2. @SimiloluwaOdeyemi Object.values(map) — это еще один массив, содержащий новые уникальные элементы.