首页 > 解决方案 > 按具有特定属性的数组对象过滤数组对象

问题描述

const arr1 = [
  {id: 1, name: 'first'},
  {id: 2, name: 'second'},
  {id: 3, name: 'third'}
];
const arr2 = [
  {id: 1, name: 'first', color: 'blue'},
  {id: 2, name: 'second', color: 'red'}
];

我想arr1id.arr2

结果应该是

result = [{id: 3, name: 'third}]

我试过了:

const arr1 = [
  {id: 1, name: 'first'},
  {id: 2, name: 'second'},
  {id: 3, name: 'third'}
];
const arr2 = [
  {id: 1, name: 'first', color: 'blue'},
  {id: 2, name: 'second', color: 'red'}
];
const result = arr1.filter((item) => {
  return arr2.some((value) => {
    return value.id !== item.id
  })
});
console.log(result);

但它的结果是

[
  {id: 1, name: 'first'},
  {id: 2, name: 'second'},
  {id: 3, name: 'third'}
];

我认为我的逻辑几乎是正确的。

任何人都可以帮助解决这个简单的错误吗?

标签: javascriptarraysfilter

解决方案


使用这种方法,您需要寻找相同性并在查找时排除。

const
    arr1 = [{ id: 1, name: 'first' }, { id: 2, name: 'second' }, { id: 3, name: 'third' }],
    arr2 = [{ id: 1, name: 'first', color: 'blue' }, { id: 2, name: 'second', color: 'red' }],
    result = arr1.filter(item => !arr2.some(value => value.id === item.id));
    //                           ^                            ^^^^

console.log(result);


推荐阅读