[英]How to merge objects in an array using javascript
我想合并数组中存在的对象。
输入:
[
{
"email": "abc@gmail.com",
"date": "2020-01-24",
"name": "bc",
"details": [{id:"1"}]
},
{
"email": "xyz@abc.in",
"date": "2020-01-22",
"name": "de",
"details": [{id:"1"}]
},
{
"email": "efg@gmail.com",
"details": [{id:2}]
},
{
"name": "ab",
"email": "abc@gmail.com",
"details": [{"id":"3"}]
},
{
"name": "",
"email": "xyz@abc.in",
"age": "",
"details": [{id:"4"}]
},
{
"name": "ef",
"email": "xyz@abc.in",
"age": "",
"details":[{id:"4"}]
},
{
"name": "",
"email": "xyz@abc.in",
"age":"18",
"details":[{id:"4"}]
}
]
我想基于电子邮件正则表达式列合并(如果我不知道该字段的名称,即它可以是电子邮件或邮件或任何其他名称)
(i)如果“id”内部详细信息相同并且电子邮件匹配,则需要进行行合并,即,如果第一行中的任何字段为空,则将其从第 2 行或第 3 行复制到第 1 行,然后删除相同的重复行“ID”。
(ii) 如果“id”内部详细信息不同且电子邮件相同,则将不同对象合并为单个对象。
请帮助我找到解决方案。
在 (ii) 条件下,合并具有不同 id 的列需要获取所有合并后的 id 的内部详细信息数组。
预期输出
[
{
"email":"abc@gmail.com",
"date": "2017-01-24",
"name": "bc",
"age":"19",
"details":[
{id:"1"},
{id:"3"}
]
},
{
"email": "xyz@abc.in",
"date": "2017-01-22",
"name" :"ef",
"age":"",
"details": [
{id:1},
{id:4}
]
},
{
"email": "efg@gmail.com",
"date": "",
"name": "",
"age": "",
"details": [
{id:2}
]
}
]
根据您提供的列表,这可能是您的解决方案。
(i) 通过遍历 inputList 并检查 (n) 索引是否存在于 newList 中,它会创建一个新的 List 而不会重复发送电子邮件。
(ii)当电子邮件已知时,它将检查 id 是否在 newItem 中匹配(可找到)(newItem 是 newList 中的项目,其中电子邮件与 inputList 的(n)索引匹配)如果找到它'我继续。 如果不是,它会将项目添加到详细信息列表中。
const list = [ { email: "abc@gmail.com", date: "2020-01-24", name: "bc", details: [{ id: "1" }], }, { email: "xyz@abc.in", date: "2020-01-22", name: "de", details: [{ id: "1" }], }, { email: "efg@gmail.com", details: [{ id: 2 }], }, { name: "ab", email: "abc@gmail.com", details: [{ id: "3" }], }, { name: "", email: "xyz@abc.in", age: "", details: [{ id: "4" }], }, { name: "ef", email: "xyz@abc.in", age: "", details: [{ id: "4" }], }, { name: "", email: "xyz@abc.in", age: "18", details: [{ id: "4" }], }, ]; const mergeList = (list) => { let newList = []; list.forEach((item) => { let isExist = false; newList.forEach((newItem) => { if (item.email === newItem.email) { isExist = true; if (!newItem.details.find((detail) => detail.id === item.details[0].id)) newItem.details.push(item.details[0]); return; } }); if (!isExist) { newList.push(item); } }); return newList; }; console.log(mergeList(list));
const mergeList = (list) => {
let newList = [];
list.forEach((item) => {
let isExist = false;
newList.forEach((newItem) => {
if (item.email === newItem.email) {
isExist = true;
if (!newItem.details.find((detail) => detail.id === item.details[0].id))
newItem.details.push(item.details[0]);
}
});
if (!isExist) {
newList.push(item);
}
});
return newList;
};
[1]: https://jsfiddle.net/wcd7t93g/2/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.