2

I have the array as below

test_list = [
{ 
    id: 1,
    test_name: 'Test 1',
    members: [
        {
            user_id: 3
        },
        {
            user_id: 4
        }
    ],
},
{ 
    id: 2,
    test_name: 'Test 2',
    members: [
        {
           user_id: 4
        },
        {
            user_id: 5
        },
    ],
},
{ 
    id: 3,
    test_name: 'Test 2',
    members: [
        {
            user_id: 8
        },  
        {
            user_id: 10
        },
    ],
}
]

I want to filter the test for specific user_id, example if user_id = 4 I would like to have this result

{ 
    id: 1,
    ...
},
{ 
    id: 2,
    ...
},

I have tried with this but it only return the member

test_list.filter(function(item) {
      item.members.filter(function(member) {
        if(member.user_id === 4) {
          return item;
        }
      });
    })

Would anyone please help me in this case?

3 Answers 3

1

Check if .some of the objects in the members array have the user_id you're looking for:

test_list = [{
    id: 1,
    test_name: 'Test 1',
    members: [{
        user_id: 3
      },
      {
        user_id: 4
      }
    ],
  },
  {
    id: 2,
    test_name: 'Test 2',
    members: [{
        user_id: 4
      },
      {
        user_id: 5
      },
    ],
  },
  {
    id: 3,
    test_name: 'Test 2',
    members: [{
      user_id: 8
    }]
  }
];

const filtered = test_list.filter(
  ({ members }) => members.some(
    ({ user_id }) => user_id === 4
  )
);
console.log(filtered);

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

Comments

1

You could use .reduce() and .filter() method of array to achieve required result.

Please check below working code snippet:

const arr = [{"id":1,"test_name":"Test 1","members":[{"user_id":3},{"user_id":4}]},{"id":2,"test_name":"Test 2","members":[{"user_id":4},{"user_id":5}]},{"id":3,"test_name":"Test 2","members":[{"user_id":8}]}];

const data = arr.reduce((r,{ members,...rest }) => {
  let rec = members.filter(o => o.user_id === 4)
  if(rec.length){
    rest.members = rec;
    r.push(rest);
  }
  return r;
},[]);

console.log(data);

Comments

0

Hope this works.

  var members = item.members;
  var filterById =members.filter((item1)=>{
    return (item1.user_id===4)
  });
  return filterById.length > 0;
});
console.log(test_List_by_id)```


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.