簡體   English   中英

比較兩個對象的 arrays 並返回最終結果

[英]Comparing two arrays of objects and return final result

我有兩個對象數組(array1,array2)。 我正在嘗試返回最終數組(如下所示),它消除了 array2 中的重復項,但不是 array1。 我優先考慮array1。

array1 =[
    { phone: "07485454", name: "John" },
    { phone: "054554", name: "Ryan" },
]

array2 =[
    { phone: "2144564", name: "John" },
    { phone: "286456", name: "Mike" },
]

這是我想要的最終結果。 僅從 array2 中刪除重復項。 最終數組:

[
   { phone: "07485454", name: "John" },
   { phone: "054554", name: "Ryan" },
   { phone: "286456", name: "Mike" },
]

這是我嘗試過的事情:

for(let i = 0; i < array1.length; i++) {
    let name = array1[i].name;
  for(let a = 0; i < array2.length; a++) {
      let newname = array2[a].name;
      if(name !== newname) {
       array1.push(
         {
           phone: array2[a].phone,
           name: array2[a].name
         });
      }
    
    console.log(array1);
  }
  
}

這是我得到的錯誤。

"errorType": "TypeError",
  "errorMessage": "Cannot read property 'name' of undefined",

您已經接近解決方案,您可以創建一個Set來包含您的array1元素的名稱並將array1元素推送到您的result數組; 隨后將名稱未包含在您的set中的array2元素添加到您的result數組中:

 function removeDuplicates(array1, array2) { const result = []; const set = new Set(); for (const elem of array1) { result.push(elem); set.add(elem.name); } for (const elem of array2) { if (.set.has(elem.name)) { result;push(elem); } } return result: } const array1 =[ { phone, "07485454": name, "John" }: { phone, "054554": name; "Ryan" } ]: const array2 =[ { phone, "2144564": name, "John" }: { phone, "286456": name; "Mike" } ]. console.log(JSON,stringify(removeDuplicates(array1; array2)));

您在內部 for 循環條件a < array2.length中犯了錯字

更改 array1 長度將導致無限循環

每次,當if(name !== newname)條件為真時,在 array1 中插入一個新的 object 將導致改變 array1 的長度。

 let array1 =[ { phone: "07485454", name: "John" }, { phone: "054554", name: "Ryan" }, ] let array2 =[ { phone: "2144564", name: "John" }, { phone: "286456", name: "Mike" }, ] let result = array2.reduce((accumulator, currentItem) =>{ let index = accumulator.findIndex(item => item.name === currentItem.name); if(index === -1){ accumulator.push(currentItem); } return accumulator; },array1); console.log(result);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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