简体   繁体   English

比较两个 arrays 对象(假定对象具有相同的道具,但不是值)

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM