繁体   English   中英

查找包含稍微不同的对象的2个数组的交集

[英]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中对象的新数组,其中firstNamelastName值在两个数组中都相同。

上述数据的期望结果:

    arr3 = [  
       {  
          "number":"1234",
          "id":"34782",
          "firstName":"John",
          "lastName":"Smith",
          "email":"test1@test.com",
       },
     ]

因为此对象的firstName和lastName在arr1arr2中都匹配

现在我有this.arr3 = this.arr1.filter(object => this.arr2.includes(object))

但是由于名称正确, arr1arr2包含不同的对象,因此不起作用。

尝试这样的事情:

 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.

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