如何根据另一个对象数组的 属性 值过滤一个对象数组?

How to filter an array of objects based on another array of object's property value?

下面有两个示例数组。

let arr1 = [
  { key: "WIHUGDYVWJ", className: "science" },
  { key: "qwljdhkuqwdnqwdk", className: "english" },
  { key: "likubqwd", className: "robotics" }
];
let arr2 = [
  { key: "WIHUGDYVWJ", title: "math" },
  { key: "qwljdhkuqwdnqwdk", title: "english" },
  { key: "likubqwd", title: "robotics" }
];
  1. 如何过滤 arr1 以仅获取 'className' 值与 arr2 的项目的 'title' 值相匹配的项目? (预计只保留 'english' 和 'robotics' 的项目)

  2. 如何过滤 arr1 以仅获取 'className' 值与 arr2 的项目的 'title' 值不匹配的项目? (预计只保留 'science' 的项目)

谢谢!

let arr1 = [
  { key: "WIHUGDYVWJ", className: "science" },
  { key: "qwljdhkuqwdnqwdk", className: "english" },
  { key: "likubqwd", className: "robotics" },
  { key: "abcd", className: "history" }
];

let arr2 = [
  { key: "WIHUGDYVWJ", title: "math" },
  { key: "qwljdhkuqwdnqwdk", title: "english" },
  { key: "likubqwd", title: "robotics" }
];

// q1 answer
console.log(arr1.map(arr1Item => arr2.filter(arr2Item => arr1Item.className === arr2Item.title)).flat());

// q2 answer
console.log(arr1.filter(arr1Item => !arr2.some(arr2Item => arr2Item.title === arr1Item.className)));

我写的时候尽可能不使用forif/else语句。 这段代码可能不是最好的。我觉得还可以再改进一下。

希望我的回答对你有帮助