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