[英]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.