javascript - 如何删除 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",
}
},
]
解决方案
您可以做的是提取一个不同的键(名称),您打算使用...对列表进行排序,然后排序
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 文件来说,这不是最好的实现......由于循环遍历数组两次
推荐阅读
- jupyter-notebook - 无法在 jupyter notebook 中安装 fastparquet
- python - python的一个问题。控制台不安装模块
- python - 在运行时替换 Python 类定义
- amazon-web-services - AWS Amplify 是对 Cognito 进行 SDK 调用的唯一方法吗?
- wordpress - 如何使用 Contact Form 7 - Dynamic Text Extension 获取自定义值
- python - 如何解析 URL 中的文本并将干净的文本放入 DataFrame 中?
- angular - Angular 7:“对象”类型上不存在属性“数据”
- python - 如何使用 os.scandir() 来取回空目录名和非空目录名
- javascript - JavaScript Accordion in a different element
- apache-kafka - Kafka Streams Materialization 是如何工作的?