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