首页 > 解决方案 > 如何删除 Javascript 数组中的重复对象属性

问题描述

我和不同的其他用户之间有一系列消息,我试图过滤这个数组以只包含一个用户的出现(例如,在这个数组中,我和 John 之间有 10 条消息,我一直是发送者或接收者),我正在尝试获取一个新数组,该数组仅包含一次出现的 John,即最新消息(无论是作为发送者还是接收者的 john)。我和 Jane 之间也有两条消息(其中一条我是发送者,另一条消息我是接收者),我希望我和 Jane 之间也只有一次消息。

所以最后我试图有一个包含三个消息的数组,

- 与托马斯合影

- 与简的一个

-与约翰合影

如果有人有解决方案请分享

[
{
    "_id": "5f58b7a4075626065aaa752a",
    "message": "Hi",
    "receiver": "5f004feae528a90017327f3b",
    "sender": "5f4ea9d045cc6b736870a076",
    "senderInfo": {
        "_id": "5f58b7a4075626065aaa752b",
        "name": "Thomas",
    },
    "receiverInfo": {
        "_id": "5f58b7a4075626065aaa752c",
        "name": "ME",
    }
},
{
    "_id": "5f57f190075626065aaa600d",
    "message": "When I click on \"go to session\", I just see myself. I doubt the connection was established",
    "receiver": "5f4e646822ab43702ee29ebb",
    "sender": "5f004feae528a90017327f3b",
    "senderInfo": {
        "_id": "5f57f190075626065aaa600e",
        "name": "Me",
    },
    "receiverInfo": {
        "_id": "5f57f190075626065aaa600f",
        "name": "John",
    }
},
{
    "_id": "5f57f08d075626065aaa5eed",
    "message": "I think I lost all the calls. The session takes a while to load",
    "receiver": "5f4e646822ab43702ee29ebb",
    "sender": "5f004feae528a90017327f3b",
    "senderInfo": {
        "_id": "5f57f08d075626065aaa5eee",
        "name": "Me ",
    },
    "receiverInfo": {
        "_id": "5f57f08d075626065aaa5eef",
        "name": "John",

    }
},
{
    "_id": "5f57f068075626065aaa5eae",
    "message": "Kk",
    "receiver": "5f004feae528a90017327f3b",
    "sender": "5f4e646822ab43702ee29ebb",
    "senderInfo": {
        "_id": "5f57f068075626065aaa5eaf",
        "name": "John",
    },
    "receiverInfo": {
        "_id": "5f57f068075626065aaa5eb0",
        "name": "Me",
    },
},
{
    "_id": "5f57efd3075626065aaa5e2d",
    "message": "I'm available now",
    "receiver": "5f4e646822ab43702ee29ebb",
    "sender": "5f004feae528a90017327f3b",
    "senderInfo": {
        "_id": "5f57efd3075626065aaa5e2e",
        "name": "Me"
    },
    "receiverInfo": {
        "_id": "5f57efd3075626065aaa5e2f",
        "name": "John",
    }
},
{
    "_id": "5f57ee75075626065aaa5dcb",
    "message": "Ok",
    "receiver": "5f4e646822ab43702ee29ebb",
    "sender": "5f004feae528a90017327f3b",
    "senderInfo": {
        "_id": "5f57ee75075626065aaa5dcc",
        "name": "Me",
    },
    "receiverInfo": {
        "_id": "5f57ee75075626065aaa5dcd",
        "name": "John",
    }
},
{
    "_id": "5f57ee5f075626065aaa5d99",
    "message": "Mark available let me try ",
    "receiver": "5f004feae528a90017327f3b",
    "sender": "5f4e646822ab43702ee29ebb",
    "attachment": null,
    "type": 1,
    "senderInfo": {
        "_id": "5f57ee5f075626065aaa5d9a",
        "name": "John"
    },
    "receiverInfo": {
        "_id": "5f57ee5f075626065aaa5d9b",
        "name": "Me"
    }
},
{
    "_id": "5f57ee23075626065aaa5d6d",
    "message": "I got the notification but it just didn't connect",
    "receiver": "5f4e646822ab43702ee29ebb",
    "sender": "5f004feae528a90017327f3b",
    "senderInfo": {
        "_id": "5f57ee23075626065aaa5d6e",
        "name": "Me"
    },
    "receiverInfo": {
        "_id": "5f57ee23075626065aaa5d6f",
        "name": "John",
    }
},
{
    "_id": "5f57ede3075626065aaa5d46",
    "message": "Didn't go",
    "receiver": "5f004feae528a90017327f3b",
    "sender": "5f4e646822ab43702ee29ebb",
    "senderInfo": {
        "_id": "5f57ede3075626065aaa5d47",
        "name": "John",
    },
    "receiverInfo": {
        "_id": "5f57ede3075626065aaa5d48",
        "name": "Me",
    }
},
{
    "_id": "5f57edd9075626065aaa5d38",
    "message": "I tried to call",
    "receiver": "5f004feae528a90017327f3b",
    "sender": "5f4e646822ab43702ee29ebb",
    "senderInfo": {
        "_id": "5f57edd9075626065aaa5d39",
        "name": "John",
    },
    "receiverInfo": {
        "_id": "5f57edd9075626065aaa5d3a",
        "name": "Me",
    }
},
{
    "_id": "5f57ed8a075626065aaa5d19",
    "message": "Hi",
    "receiver": "5f4e646822ab43702ee29ebb",
    "sender": "5f004feae528a90017327f3b",
    "senderInfo": {
        "_id": "5f57ed8a075626065aaa5d1a",
        "name": "Me",
    },
    "receiverInfo": {
        "_id": "5f57ed8a075626065aaa5d1b",
        "name": "John",
    },
},

{
    "_id": "5f58b7a4075626065aaa752a",
    "message": "Hi",
    "receiver": "5f004feae528a90017327f3b",
    "sender": "5f4ea9d045cc6b736870a076",
    "senderInfo": {
        "_id": "5f58b7a4075626065aaa752b",
        "name": "Jane",
    },
    "receiverInfo": {
        "_id": "5f58b7a4075626065aaa752c",
        "name": "ME",
    }
},

{
    "_id": "5f58b7a4075626065aaa752a",
    "message": "Hi",
    "receiver": "5f004feae528a90017327f3b",
    "sender": "5f4ea9d045cc6b736870a076",
    "receiverInfo": {
        "_id": "5f58b7a4075626065aaa752b",
        "name": "Jane",
    },
    "senderInfo": {
        "_id": "5f58b7a4075626065aaa752c",
        "name": "ME",
    }
},

]

标签: javascriptarraysjavascript-objects

解决方案


您可以做的是提取一个不同的键(名称),您打算使用...对列表进行排序,然后排序

let dJson ='{JSON}'


// GET ALL SENDER OR RECEIVERS NAME AS KEY

let allNames = [] // all mail names , includes dublicate

const p_me = JSON.parse(dJson);

p_me['lol'].forEach(item => {
  if (item.receiverInfo.name.toLowerCase() !== "me") {
    allNames.push(item.receiverInfo.name.toLowerCase())
  } else {
    allNames.push(item.senderInfo.name.toLowerCase())
  }
})




// REMOVE Dublicates Using Set Object 


let names = [...new Set(allNames)];


// Get The New Filtered List 
let MyList = [] // The required list

for (name of names) {
  for (obj of p_me['lol']) {

    if (obj.receiverInfo.name.toLowerCase() == name || obj.senderInfo.name.toLowerCase() == name) {

      //Get the first match and disregard the rest for the same name
      MyList.push(obj)
      break
    }
  }

}

对于非常大的 json 文件来说,这不是最好的实现......由于循环遍历数组两次


推荐阅读