[英]Find intersection of 2 arrays containing slightly different objects
我试图从包含稍微不同的对象的2个不同的数组中找到交集。
例如:
const arr1 = [ { "number":"1234", "id":"34782", "firstName":"John", "lastName":"Smith", "email":"test1@test.com", }, { "number":"1232", "id":"34783", "firstName":"Chad", "lastName":"Baker", "email":"test2@test.com", } ]; const arr2 = [ { "uuid":"0123", "firstName":"John", "lastName":"Smith", "title":"Director" }, { "uuid":"0125", "firstName":"Sam", "lastName":"Hurst", "title":"Manager" } ] const arr3 = arr1.filter(object => arr2.includes(object)); console.log(arr3);
我正在尝试创建一个仅包含arr1
中对象的新数组,其中firstName
和lastName
值在两个数组中都相同。
上述数据的期望结果:
arr3 = [
{
"number":"1234",
"id":"34782",
"firstName":"John",
"lastName":"Smith",
"email":"test1@test.com",
},
]
因为此对象的firstName和lastName在arr1
和arr2
中都匹配
现在我有this.arr3 = this.arr1.filter(object => this.arr2.includes(object))
但是由于名称正确, arr1
和arr2
包含不同的对象,因此不起作用。
尝试这样的事情:
const arr1 = [{ "number": "1234", "id": "34782", "firstName": "John", "lastName": "Smith", "email": "test1@test.com", }, { "number": "1232", "id": "34783", "firstName": "Chad", "lastName": "Baker", "email": "test2@test.com", } ]; const arr2 = [{ "uuid": "0123", "firstName": "John", "lastName": "Smith", "title": "Director" }, { "uuid": "0125", "firstName": "Sam", "lastName": "Hurst", "title": "Manager" } ] const arr3 = arr1.filter(value => arr2.some(value2 => value.firstName === value2.firstName && value.lastName === value2.lastName ) ); console.log(arr3);
基本上,使用some
而不是includes
因为这使您可以提供谓词。
我想你可以试试这个:
arr1.filter(item1 => (arr2.find(item2 => (item2.firstName == item1.firstName && item2.lastName == item1.lastName)) != undefined));
它使用arr2.find函数检查它是否包含某些具有相同firstName和lastName属性的项目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.