簡體   English   中英

比較兩個 arrays 對象(假定對象具有相同的道具,但不是值)

[英]Compare two arrays of objects (given the objects have same props, but not values)

考慮以下兩個 arrays 對象:

const arr1 = [
  {name: "name1", id: 1},
  {name: "name2", id: 2},
  {name: "name3", id: 3}
];

const arr2 = [
  {name: "name1", id: 1},
  {name: "name2", id: 4},
  {name: "name3", id: 3}
];

這兩個對象的比較必須返回false ,因為arr1中缺少arr2中 prop id的值(即id: 4 )。

此時,已經進行了以下嘗試:

arr1.every(i => i.id === arr2.map(z =>z.id));

注意:假設arr2是:

const arr2 = [
    {name: "name1", id: 1},
    {name: "name3", id: 3}
];

比較必須返回true ,因為arr2中每個元素的id都可以在arr1的元素中找到。

您非常接近,但map用於將數組的每個元素映射到某個新值,而不是查看元素是否存在。 你會為此使用some ,並且你想要反轉你正在調用every some

const flag = arr2.every(element => arr1.some(({id}) => id === element.id));

那就是說:“ arr2的每個元素是否在arr1中至少有一個匹配元素id ?”

現場示例:

 const arr1 = [ {name: "name1", id: 1}, {name: "name2", id: 2}, {name: "name3", id: 3} ]; const arr2 = [ {name: "name1", id: 1}, {name: "name2", id: 4}, {name: "name3", id: 3} ]; const arr3 = [ {name: "name1", id: 1}, {name: "name3", id: 3} ]; const result1 = arr2.every(element => arr1.some(({id}) => id === element.id)); console.log("arr2 and arr1: " + result1); const result2 = arr3.every(element => arr1.some(({id}) => id === element.id)); console.log("arr3 and arr1: " + result2);

暫無
暫無

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

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