过滤两个对象数组并获得结果数组

时间:2020-07-09 02:06:23

标签: javascript ecmascript-6

我正在尝试检查一个数组中的carId等于另一个数组的id的条件。

下面是代码段。

const arr1 = [{
    id: '1',
    type: 'car',
    name: 'BMW',
  },
  {
    id: '2',
    type: 'car',
    name: 'Audi',
  },
  {
    id: '3',
    type: 'car',
    name: 'Benz',
  }
];

const arr2 = [{
  carId: '1'
}, {
  carId: '3'
}];

const result = arr2.map(val => arr2.find(val.carId === id))
console.log(result)

我期望的结果是

[{
    id: '1',
    type: 'car',
    name: 'BMW',
  },
  {
    id: '3',
    type: 'car',
    name: 'Benz',
  }
];

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:2)

虽然您应该在.filter()上使用arr1,并将回调传递给.find(),但我可能会先将arr2转换为简单的ID列表,然后使用{ {1}}。

.includes()


或更妙的是,将const arr1 = [{ id: '1', type: 'car', name: 'BMW', }, { id: '2', type: 'car', name: 'Audi', }, { id: '3', type: 'car', name: 'Benz', } ]; const arr2 = [{ carId: '1' }, { carId: '3' }]; const ids = arr2.map(o => o.carId); const result = arr1.filter(val => ids.includes(val.id)) console.log(result)转换为arr2

Set

答案 1 :(得分:1)

const arr1 = [{
    id: '1',
    type: 'car',
    name: 'BMW',
  },
  {
    id: '2',
    type: 'car',
    name: 'Audi',
  },
  {
    id: '3',
    type: 'car',
    name: 'Benz',
  }
];

const arr2 = [{
  carId: '1'
}, {
  carId: '3'
}];

const result = arr1.filter(a1val => arr2.find(a2val => a2val.carId === a1val.id) !== undefined);
console.log(result);

答案 2 :(得分:0)

这可能有效

const result = arr2.map(val => arr1.find(item => item.id === val.carId))