0

I think I don't understand how I can filter an object with an array.

I get this data from my 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"]
  }
]

And now I would like filter the data with this array (the numbers are the value of "_id"):

[5fed0cde68b6e7856dffb26c,5ff47f6768b6e7856d121930]

I expect the first two objects of the mongoDB-Data.

Can someone explain and help me with the problem?

2
  • what is your expected output? Commented Jan 8, 2021 at 22:18
  • Use filter() to filter the array, and use search_array.includes(element._id) in the test function. Commented Jan 8, 2021 at 22:19

2 Answers 2

2

You can create a Set from the the array of ids and filter the data based on it.

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);

Sign up to request clarification or add additional context in comments.

Comments

1

Solution

As in the commentarys mentioned you can use Arrays filter function.

Inside filter you can build a condition with the includes method so check if you your searchID' array includes the new 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);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.