两个数组对比,找出A数组中存在而B数组不存在的值

 方法一:使用 filter() 方法和 find() 方法

const array1 = [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}, {id: 3, name: 'Charlie'}];
const array2 = [{id: 2, name: 'Bob'}, {id: 4, name: 'David'}, {id: 5, name: 'Edward'}];

// 使用 filter() 方法和 find() 方法提取出 array1 中不在 array2 中存在的对象
const uniqueObjects = array1.filter(obj1 => !array2.find(obj2 => obj1.id === obj2.id));

console.log('array1 中不在 array2 中存在的对象为:', uniqueObjects);
在这个示例中,我们使用 filter() 方法和 find() 方法来提取出 array1 中不在 array2 中存在的对象。通过判断 obj1.id 是否等于 obj2.id 来比较两个对象。

输出结果将是 array1 中不在 array2 中存在的对象数组,即 [{id: 1, name: 'Alice'}, {id: 3, name: 'Charlie'}]。

方法二:使用 reduce() 方法和自定义比较函数

const array1 = [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}, {id: 3, name: 'Charlie'}];
const array2 = [{id: 2, name: 'Bob'}, {id: 4, name: 'David'}, {id: 5, name: 'Edward'}];

// 自定义比较函数
function compareObjects(obj1, obj2) {
  return obj1.id === obj2.id;
}

// 使用 reduce() 方法和自定义比较函数提取出 array1 中不在 array2 中存在的对象
const uniqueObjects = array1.reduce((result, obj1) => {
  if (!array2.some(obj2 => compareObjects(obj1, obj2))) {
    result.push(obj1);
  }
  return result;
}, []);

console.log('array1 中不在 array2 中存在的对象为:', uniqueObjects);

方法三:使用 ES6 Set 数据结构

const array1 = [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}, {id: 3, name: 'Charlie'}];
const array2 = [{id: 2, name: 'Bob'}, {id: 4, name: 'David'}, {id: 5, name: 'Edward'}];

// 使用 Set 数据结构提取出 array1 中不在 array2 中存在的对象
const set1 = new Set(array1.map(obj => JSON.stringify(obj)));
const uniqueObjects = array2.filter(obj => !set1.has(JSON.stringify(obj)));

console.log('array1 中不在 array2 中存在的对象为:', uniqueObjects);

方法四:使用 filter() 跟 some() 

const arrayA = [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}, {id: 3, name: 'Charlie'}];
const arrayB = [{id: 2, name: 'Bob'}, {id: 4, name: 'David'}, {id: 5, name: 'Edward'}];

// 使用 filter() 方法提取出 arrayA 中不在 arrayB 中存在的对象
const uniqueObjects = arrayA.filter(objA => !arrayB.some(objB => objB.id === objA.id));

console.log('arrayA 中不在 arrayB 中存在的对象为:', uniqueObjects);

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值