簡體   English   中英

如何使用javascript合並數組中的對象

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM