筛选两个数组中相同的对象

方法 1:使用 filtersome

const array1 = [
  { id: 1, name: 'Alice' },
  { id: 2, name: 'Bob' },
  { id: 3, name: 'Charlie' }
];

const array2 = [
  { id: 3, name: 'Charlie' },
  { id: 4, name: 'David' },
  { id: 5, name: 'Eve' }
];

const commonObjects = array1.filter(obj1 => 
  array2.some(obj2 => obj1.id === obj2.id)
);
 // 需要id-直接后面链式map
console.log(commonObjects);

方法 2:使用 filterincludes(适用于简单的值)

如果两个数组中每个对象是简单的值,可以使用 includes 来筛选出相同的对象。例如:

const array1 = [1, 2, 3, 4, 5];
const array2 = [3, 4, 5, 6, 7];

const commonElements = array1.filter(value => array2.includes(value));

console.log(commonElements); // 输出 [3, 4, 5]

// 只需要id
const array1 = [
  { id: 1, name: 'Alice' },
  { id: 2, name: 'Bob' },
  { id: 3, name: 'Charlie' }
];
const array2 = [
  { id: 3, name: 'Charlie' },
  { id: 4, name: 'David' },
  { id: 5, name: 'Eve' }
];

const array2Ids = array2.map(obj => obj.id);
const commonIds = array1
  .map(obj => obj.id)
  .filter(id => array2Ids.includes(id));

console.log(commonIds); // 输出 [3]

方法 3:使用 reduceMap 提高性能

对于大数组,使用 Map 来提高查找性能:

const array1 = [
  { id: 1, name: 'Alice' },
  { id: 2, name: 'Bob' },
  { id: 3, name: 'Charlie' }
];

const array2 = [
  { id: 3, name: 'Charlie' },
  { id: 4, name: 'David' },
  { id: 5, name: 'Eve' }
];

const map = new Map(array2.map(obj => [obj.id, obj]));

const commonObjects = array1.reduce((acc, obj) => {
  if (map.has(obj.id)) {
    acc.push(obj);
  }
  return acc;
}, []);

console.log(commonObjects);
  • 12
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值