简体   繁体   English

Object 与用户,当 2 个值匹配时删除除一个以外的所有值(名字,姓氏)

[英]Object with users, remove all but one when 2 values match (firstname, lastname)

I want to create a new object, where the users should only appear once.我想创建一个新的 object,用户应该只出现一次。 So if a person appears multiple times, which is given when given_name and family_name both match, all but one are removed.因此,如果一个人出现多次,这是在given_namefamily_name都匹配时给出的,除了一个之外的所有都被删除。

Example:例子:

 [
      {
        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',
      }
    ]

So the above should result in this:所以上面的结果应该是这样的:

[
      {
        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',
      }
    ]

You can do something like this, here we are using a map to get the unique values.你可以做这样的事情,这里我们使用地图来获取唯一值。 For the keys in the map, we use a combination of given_name and family_name .对于地图中的键,我们使用given_namefamily_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) => { const userNameMap = {}; data.forEach((user) => { const userName = `${user.given_name}|${user.family_name}`; userNameMap[userName] = user; }); return Object.values(userNameMap); }; console.log(removeDuplicates(users));

using ES6使用 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) => index === self.findIndex((t) => ( t.given_name === item.given_name && t.family_name === item.family_name )) ) console.log(result)

请使用下面的一个班轮代码

 let arr = arr.filter((item,index)=>arr.findIndex(item2=>(item.family_name == item2.family_name && item.given_name == item2.given_name))>=index)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM