繁体   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