[英]Compare two arrays of objects (given the objects have same props, but not values)
Consider below two arrays of objects:考虑以下两个 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}
];
Comparison of these two objects must return false
because there are values for prop id
in arr2
that are missing in arr1
(namely id: 4
).这两个对象的比较必须返回
false
,因为arr1
中缺少arr2
中 prop id
的值(即id: 4
)。
At this point, the below attempt has been made:此时,已经进行了以下尝试:
arr1.every(i => i.id === arr2.map(z =>z.id));
NOTE: Suppose arr2
was:注意:假设
arr2
是:
const arr2 = [
{name: "name1", id: 1},
{name: "name3", id: 3}
];
The comparison must return true
, since the id
of every element in arr2
is found in arr1
's elements.比较必须返回
true
,因为arr2
中每个元素的id
都可以在arr1
的元素中找到。
You're relaly close, but map
is for mapping each element of the array to some new value, not for seeing if an element exists.您非常接近,但
map
用于将数组的每个元素映射到某个新值,而不是查看元素是否存在。 You'd use some
for that, and you'd want to reverse the arrays you're calling every
and some
on:你会为此使用
some
,并且你想要反转你正在调用every
some
:
const flag = arr2.every(element => arr1.some(({id}) => id === element.id));
That says: "Does every element of arr2
have at least one matching element in arr1
by id
?"那就是说:“
arr2
的每个元素是否在arr1
中至少有一个匹配元素id
?”
Live Example:现场示例:
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.