如何根据另一个对象数组的 属性 值过滤一个对象数组?
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" }
];
如何过滤 arr1 以仅获取 'className' 值与 arr2 的项目的 'title' 值相匹配的项目? (预计只保留 'english' 和 'robotics' 的项目)
如何过滤 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)));
我写的时候尽可能不使用for
、if/else
语句。
这段代码可能不是最好的。我觉得还可以再改进一下。
希望我的回答对你有帮助
下面有两个示例数组。
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" }
];
如何过滤 arr1 以仅获取 'className' 值与 arr2 的项目的 'title' 值相匹配的项目? (预计只保留 'english' 和 'robotics' 的项目)
如何过滤 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)));
我写的时候尽可能不使用for
、if/else
语句。
这段代码可能不是最好的。我觉得还可以再改进一下。
希望我的回答对你有帮助