簡體   English   中英

JS - 用數組過濾數組(包括對象)

[英]JS - filter an array (includes object) with an array

我想我不明白如何用數組過濾 object。

我從我的 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-Data 的前兩個對象。

有人可以解釋並幫助我解決這個問題嗎?

您可以從 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 過濾器 function。

在過濾器內部,您可以使用包含方法構建條件,因此請檢查您的 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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM