首页 > 解决方案 > 将对象数组与值数组匹配

问题描述

如果我有 2 个数组:

arr1: ["1","2"]
arr2: [{id: 1, color: "green"}, {id: 2, color: "yellow"}, {id: 3, color: "red"}]

我想获得:

result: [{id: 1, color: "green"}, {id: 2, color: "yellow"}]

我正在尝试

arr2.filter(
  e => arr1.indexOf(e.id) !== -1
);

但结果是空的。

标签: javascriptarrays

解决方案


您可以使用Array.prototype.filter()withArray.prototype.some()方法来获得结果。

const arr1 = ['1', '2'];
const arr2 = [
  { id: 1, color: 'green' },
  { id: 2, color: 'yellow' },
  { id: 3, color: 'red' },
];

const ret = arr2.filter((x) => arr1.some((y) => +y === x.id));
console.log(ret);

另一种使用Set Object.

const arr1 = ['1', '2'];
const arr2 = [
  { id: 1, color: 'green' },
  { id: 2, color: 'yellow' },
  { id: 3, color: 'red' },
];
const set = new Set(arr1);
const ret = arr2.filter((x) => set.has(x.id.toString()));
console.log(ret);


推荐阅读