首页 > 解决方案 > 如何从 2 个数组中仅返回不重复的对象

问题描述

我发现了很多类似的问题,但他们解释了如何删除重复的对象。在这种情况下,我需要创建一个不包含在两个数组中找到的对象的新数组。

const firstArray = [
  {firstName: 'John', lastName: 'Doe'}, 
  {firstName: 'Sara', lastName: 'Connor'},
  {firstName: 'Mike', lastName: 'Hunt'}, 
  {firstName: 'Steve', lastName: 'Irvine'}
];

const secondArray = [ 
  {firstName: 'John', lastName: 'Doe'},  
  {firstName: 'Sara', lastName: 'Connor'} 
];

上一个数据样本的预期结果应该是:

const result = [
  {firstName: 'Mike', lastName: 'Hunt'},
  {firstName: 'Steve', lastName: 'Irvine'}
];

标签: javascriptarrays

解决方案


我将首先连接两个数组,然后使用some()在每个数组上搜索未出现在两个数组上的那些元素。请注意,此方法考虑了 the和 the都可以包含非重复对象的可能性。firstArraysecondArray

const firstArray = [
  {firstName: 'John', lastName: 'Doe'}, 
  {firstName: 'Sara', lastName: 'Connor'},
  {firstName: 'Mike', lastName: 'Hunt'}, 
  {firstName: 'Steve', lastName: 'Irvine'}
];

const secondArray = [ 
  {firstName: 'John', lastName: 'Doe'},  
  {firstName: 'Sara', lastName: 'Connor'},
  {firstName: 'Joseph', lastName: 'Muguera'}
];

let res = firstArray.concat(secondArray).filter(({firstName, lastName}) =>
{
    let foundOnFirst = firstArray.some(
        x => x.firstName === firstName && x.lastName === lastName
    );
    let foundOnSecond = secondArray.some(
        y => y.firstName === firstName && y.lastName === lastName
    );
    return !(foundOnFirst && foundOnSecond);
});

console.log(res);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}


推荐阅读