Объект с пользователями, удалите все, кроме одного, когда совпадут 2 значения (имя, фамилия)

#javascript #arrays #sorting #object #filter

Вопрос:

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

Пример:

 [  {  given_name: 'Aha',  family_name: 'Yes',  email: 'Yes@gmail.com',  },  {  given_name: 'Testname',  family_name: 'Test',  email: 'Testname@gmail.com',  },  {  given_name: 'Hans',  family_name: 'Test',  email: 'Testname@gmail.com',  },  {  given_name: 'Aha',  family_name: 'Yes',  email: 'Yesassss@gmail.com',  }  ]  

Таким образом, все вышесказанное должно привести к этому:

 [  {  given_name: 'Aha',  family_name: 'Yes',  email: 'Yes@gmail.com',  },  {  given_name: 'Testname',  family_name: 'Test',  email: 'Testname@gmail.com',  },  {  given_name: 'Hans',  family_name: 'Test',  email: 'Testname@gmail.com',  }  ]  

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

1. Почему удален второй Ага, а не первый?

2. Для меня не имеет значения, какой из них удален, мне просто нужны все пользователи (имя, фамилия) без дубликатов.

Ответ №1:

Пожалуйста, используйте приведенный ниже код одной строки

 let arr = arr.filter((item,index)=gt;arr.findIndex(item2=gt;(item.family_name == item2.family_name amp;amp; item.given_name == item2.given_name))gt;=index) 

Ответ №2:

использование ES6

 let arry=[  {  given_name: 'Aha',  family_name: 'Yes',  email: 'Yes@gmail.com',  },  {  given_name: 'Testname',  family_name: 'Test',  email: 'Testname@gmail.com',  },  {  given_name: 'Hans',  family_name: 'Test',  email: 'Testname@gmail.com',  },  {  given_name: 'Aha',  family_name: 'Yes',  email: 'Yesassss@gmail.com',  }  ]    let result= arry.filter((item, index, self) =gt;  index === self.findIndex((t) =gt; (  t.given_name === item.given_name amp;amp; t.family_name === item.family_name  )) )  console.log(result) 

Ответ №3:

Вы можете сделать что-то вроде этого, здесь мы используем карту, чтобы получить уникальные значения. Для ключей на карте мы используем комбинацию given_name и family_name .

 const users = [{given_name: "Aha", family_name: "Yes", email: "Yes@gmail.com"}, {given_name: "Testname", family_name: "Test", email: "Testname@gmail.com"}, {given_name: "Hans", family_name: "Test", email: "Testname@gmail.com"}, {given_name: "Aha", family_name: "Yes", email: "Yesassss@gmail.com"}];  const removeDuplicates = (data) =gt; {  const userNameMap = {};  data.forEach((user) =gt; {  const userName = `${user.given_name}|${user.family_name}`;  userNameMap[userName] = user;  });   return Object.values(userNameMap); };  console.log(removeDuplicates(users));