#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));