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