JS-用数组过滤数组(包括对象)



我想我不明白如何用数组过滤对象。

我从我的mongoDB:获得这些数据

[{
"_id": "5fed0cde68b6e7856dffb26c",
"question": "Questions1",
"answer1": "1",
"isTrue1": true,
"answer2": "2",
"isTrue2": false,
"answer3": "3",
"isTrue3": false,
"answer4": "4",
"isTrue4": false,
"category": ["5fed0fe768b6e7856d0244ea", "5ff0278968b6e7856d3d04cd"]
},
{
"_id": "5ff47f6768b6e7856d121930",
"question": "Questions1",
"answer1": "1",
"isTrue1": true,
"answer2": "2",
"isTrue2": false,
"answer3": "3",
"isTrue3": false,
"answer4": "4",
"isTrue4": false,
"category": ["5fed0fe768b6e7856d0244ea", "5ff0278968b6e7856d3d04cd"]
},
{
"_id": "5ff7190568b6e7856dba37c6",
"question": "Questions1",
"answer1": "1",
"isTrue1": true,
"answer2": "2",
"isTrue2": false,
"answer3": "3",
"isTrue3": false,
"answer4": "4",
"isTrue4": false,
"category": ["5ff8d51668b6e7856dd0ce9b", "5ff8d51f68b6e7856dd0d3f5"]
}
]

现在我想用这个数组过滤数据(数字是"_id"的值(:

[5fed0cde68b6e7856dffb26c,5ff47f6768b6e7856d121930]

我期待mongoDB数据的前两个对象。

有人能解释并帮我解决这个问题吗?

您可以从id数组创建一个Set,并根据它过滤数据。

const arr = [{"_id":"5fed0cde68b6e7856dffb26c","question":"Questions1","answer1":"1","isTrue1":true,"answer2":"2","isTrue2":false,"answer3":"3","isTrue3":false,"answer4":"4","isTrue4":false,"category":["5fed0fe768b6e7856d0244ea","5ff0278968b6e7856d3d04cd"]},
{"_id":"5ff47f6768b6e7856d121930","question":"Questions1","answer1":"1","isTrue1":true,"answer2":"2","isTrue2":false,"answer3":"3","isTrue3":false,"answer4":"4","isTrue4":false,"category":["5fed0fe768b6e7856d0244ea","5ff0278968b6e7856d3d04cd"]},
{"_id":"5ff7190568b6e7856dba37c6","question":"Questions1","answer1":"1","isTrue1":true,"answer2":"2","isTrue2":false,"answer3":"3","isTrue3":false,"answer4":"4","isTrue4":false,"category":["5ff8d51668b6e7856dd0ce9b","5ff8d51f68b6e7856dd0d3f5"]}]
const set = new Set(['5fed0cde68b6e7856dffb26c','5ff47f6768b6e7856d121930']);
const res = arr.filter(({_id})=>set.has(_id));
console.log(res);

解决方案

正如在评论中提到的,您可以使用Arrays过滤器功能。

在过滤器内部,您可以使用includes方法构建一个条件,因此请检查您的searchID数组是否包含新的id

const objects = [{
"_id": "5fed0cde68b6e7856dffb26c",
"question": "Questions1",
"answer1": "1",
"isTrue1": true,
"answer2": "2",
"isTrue2": false,
"answer3": "3",
"isTrue3": false,
"answer4": "4",
"isTrue4": false,
"category": ["5fed0fe768b6e7856d0244ea", "5ff0278968b6e7856d3d04cd"]
},
{
"_id": "5ff47f6768b6e7856d121930",
"question": "Questions1",
"answer1": "1",
"isTrue1": true,
"answer2": "2",
"isTrue2": false,
"answer3": "3",
"isTrue3": false,
"answer4": "4",
"isTrue4": false,
"category": ["5fed0fe768b6e7856d0244ea", "5ff0278968b6e7856d3d04cd"]
},
{
"_id": "5ff7190568b6e7856dba37c6",
"question": "Questions1",
"answer1": "1",
"isTrue1": true,
"answer2": "2",
"isTrue2": false,
"answer3": "3",
"isTrue3": false,
"answer4": "4",
"isTrue4": false,
"category": ["5ff8d51668b6e7856dd0ce9b", "5ff8d51f68b6e7856dd0d3f5"]
}
]
const searchKeywords = ["5fed0cde68b6e7856dffb26c","5ff47f6768b6e7856d121930"]

let resultObj = objects.filter(val => searchKeywords.includes(val._id))


console.log(resultObj);

最新更新