[英]Check if object from one array is included inside another array of objects
We have 2 arrays我们有 2 个 arrays
const arr1 = [{color: 'red', shape: 'square'}, {color: 'blue', shape: 'circle'}, {color: 'green', shape: 'square}]
const arr2 = [{color: 'red', shape: 'circle'}, {color: 'blue', shape: 'circle'}]
I want to check if at least one item from arr2 is included inside of arr1 (if yes return bool value).我想检查 arr2 中的至少一项是否包含在 arr1 中(如果是,则返回 bool 值)。 So far i tried
arr2.some(item => arr1.includes(item))
but this doesn't seem to work.到目前为止,我尝试
arr2.some(item => arr1.includes(item))
但这似乎不起作用。
you can use this code arr2.some(item => arr1.find(e=>JSON.stringify(e) === JSON.stringify(item))您可以使用此代码 arr2.some(item => arr1.find(e=>JSON.stringify(e) === JSON.stringify(item))
Array.prototype.includes checks if it is equal so it is useful for primitive values. Array.prototype.includes 检查它是否相等,因此它对原始值很有用。 To check if it deep equal (for arrays and objects) you can use find method.
要检查它是否深度相等(对于 arrays 和对象),您可以使用 find 方法。 So correct solution would be:
所以正确的解决方案是:
arr2.some(item => arr1.find(e=>e.color==item.color&&e.shape==item.shape))
Array includes()
matches the object using reference equality, it does not deep compare item object's properties.数组
includes()
使用引用相等匹配 object,它不深入比较项目对象的属性。 So, you also need an object matcher.因此,您还需要一个 object 匹配器。
const overlap = arr1.some(i1 => arr2.some(i2 => matchObj(i1,i2)));
and you will have to write an implementation of matchObj(obj1, obj2)
.你将不得不编写
matchObj(obj1, obj2)
的实现。
You can also use lodash's isEqual()
or intersecttionWith()
method:您还可以使用 lodash 的
isEqual()
或intersecttionWith()
方法:
const arr1 = [{color: 'red', shape: 'square'}, {color: 'blue', shape: 'circle'}, {color: 'green', shape: 'square'}]; const arr2 = [{color: 'red', shape: 'circle'}, {color: 'blue', shape: 'circle'}]; // check for overlap const hasCommon = _.some(arr1, i1 => _.some(arr2, i2 => _.isEqual(i1, i2))); console.log('hasCommon:', hasCommon); // get common items const commonItems = _.intersectionWith(arr1, arr2, _.isEqual); console.log('commonItems:', commonItems);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>
If your array of object is small, not too big.如果您的 object 数组很小,也不会太大。 You can use JSON.stringify too check.
您也可以使用 JSON.stringify 检查。
const arr1_str = JSON.stringify(arr1);
arr2.some(item2 => arr1_str.includes(JSON.stringify(item2)));
const arr1 = [{color: 'red', shape: 'square'}, {color: 'blue', shape: 'circle'}, {color: 'green', shape: 'square'}]; const arr2 = [{color: 'red', shape: 'circle'}, {color: 'blue', shape: 'circle'}]; const arr1_str = JSON.stringify(arr1); console.log(arr2.some(item2 => arr1_str.includes(JSON.stringify(item2))));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.