从数组中删除具有特定键值的重复对象

时间:2021-05-18 04:32:21

标签: javascript arrays

我有以下数组

[
    {
        "membershipId": "ckktojfvl2510541qu2xlfli79q",
        "key": "ckkt9j5uq59711qu2hod0pgln",
        "isUser": true,
        "firstName": "Jennifer",
        "lastName": "Lopez",
        "name": "Jennifer Lopez",
        "DOB": "12/31/1969",
        "age": 51,
        "email": "jlo@me.com",
    },
    {
        "membershipId": "ckotgsxdz107481p2vo6r0mb0l",
        "key": "ckotgs3xo56081p2v2ek518pb",
        "isUser": true,
        "firstName": "Richard",
        "lastName": "Rizk",
        "name": "Richard Rizk",
        "DOB": "Invalid date",
        "age": "-",
        "email": "nadia@me.com",
        
    },
    {
        "membershipId": undefined,
        "key": "ckotgs3xo56081p2v2ek518pb",
        "isUser": true,
        "firstName": "Richard",
        "lastName": "Rizk",
        "name": "Richard Rizk",
        "DOB": "Invalid date",
        "age": "-",
        "email": "nadia@me.com",
        
    },
    {
        "membershipId": undefined,
        "key": "ckothigbd244581p2vfy5tihls",
        "isUser": false,
        "firstName": "Profile",
        "lastName": "Last",
        "name": "Profile Last",
        "DOB": "05/17/1986",
        "age": 35,
        "email": "",
        
    }
]

该数组有四个对象,但其中两个在某种程度上是相同的。

我需要删除 memberId 等于 UNDEFINED 的重复项并保留另一个。

有人可以帮我吗?

2 个答案:

答案 0 :(得分:-1)

尝试使用:

var data = [
    {
        "membershipId": "ckktojfvl2510541qu2xlfli79q",
        "key": "ckkt9j5uq59711qu2hod0pgln",
        "isUser": true,
        "firstName": "Jennifer",
        "lastName": "Lopez",
        "name": "Jennifer Lopez",
        "DOB": "12/31/1969",
        "age": 51,
        "email": "jlo@me.com",
    },
    {
        "membershipId": "ckotgsxdz107481p2vo6r0mb0l",
        "key": "ckotgs3xo56081p2v2ek518pb",
        "isUser": true,
        "firstName": "Richard",
        "lastName": "Rizk",
        "name": "Richard Rizk",
        "DOB": "Invalid date",
        "age": "-",
        "email": "nadia@me.com",
        
    },
    {
        "membershipId": undefined,
        "key": "ckotgs3xo56081p2v2ek518pb",
        "isUser": true,
        "firstName": "Richard",
        "lastName": "Rizk",
        "name": "Richard Rizk",
        "DOB": "Invalid date",
        "age": "-",
        "email": "nadia@me.com",
        
    },
    {
        "membershipId": undefined,
        "key": "ckothigbd244581p2vfy5tihls",
        "isUser": false,
        "firstName": "Profile",
        "lastName": "Last",
        "name": "Profile Last",
        "DOB": "05/17/1986",
        "age": 35,
        "email": "",
        
    }
];
console.log(data.filter((item)=>item.membershipId));

答案 1 :(得分:-1)

如果有另一个具有相同键和定义的 membershipId 的元素,您可以通过这种方式删除未定义的 membershipId 元素。它创建一个包含所有键的数组,其中 membershipId 不是未定义的。然后创建另一个包含元素的数组,其中 membershipId 不是未定义的或者键在前一个数组中不存在(这意味着没有重复定义的 membershipId)。

let data = [
    {
        "membershipId": "ckktojfvl2510541qu2xlfli79q",
        "key": "ckkt9j5uq59711qu2hod0pgln",
        "isUser": true,
        "firstName": "Jennifer",
        "lastName": "Lopez",
        "name": "Jennifer Lopez",
        "DOB": "12/31/1969",
        "age": 51,
        "email": "jlo@me.com",
    },
    {
        "membershipId": "ckotgsxdz107481p2vo6r0mb0l",
        "key": "ckotgs3xo56081p2v2ek518pb",
        "isUser": true,
        "firstName": "Richard",
        "lastName": "Rizk",
        "name": "Richard Rizk",
        "DOB": "Invalid date",
        "age": "-",
        "email": "nadia@me.com",
        
    },
    {
        "membershipId": undefined,
        "key": "ckotgs3xo56081p2v2ek518pb",
        "isUser": true,
        "firstName": "Richard",
        "lastName": "Rizk",
        "name": "Richard Rizk",
        "DOB": "Invalid date",
        "age": "-",
        "email": "nadia@me.com",
        
    },
    {
        "membershipId": undefined,
        "key": "ckothigbd244581p2vfy5tihls",
        "isUser": false,
        "firstName": "Profile",
        "lastName": "Last",
        "name": "Profile Last",
        "DOB": "05/17/1986",
        "age": 35,
        "email": "",
        
    }
]

let keys = data.filter(e=>e.membershipId!==undefined).map(e=>e.key)

let result = data.filter(e=>(e.membershipId!==undefined || !keys.includes(e.key)))

console.log(result)