1

I have an array of objects which has a nested parameter in it and I want to return only those array elements that pass filter based on that nested parameter which is in turn also an array of objects.

[{q:1,w:2,props:{p:1, messages:[{status:true},{status:false},{status:true}]},
{q:3,w:5,props:{p:2, messages:[{status:false},{status:false},{status:false}]},
{q:7,w:0,props:{p:3, messages:[{status:false},{status:false},{status:true}]}
]

My aim is to filter only those objects that contain at least one message with status true. In this example I would expect to get an array of two objects

[{q:1,w:2,props:{p:1, messages:[{status:true},{status:false},{status:true}]},
{q:7,w:0,props:{p:3, messages:[{status:false},{status:false},{status:true}]}
]

Thanks for help and advice!

4 Answers 4

4

some() will let you check if a condition is true at least once. You can use that to filter: filter

let arr = [{q:1,w:2,props:{p:1, messages:[{status:true},{status:false},{status:true}]}},{q:3,w:5,props:{p:2, messages:[{status:false},{status:false},{status:false}]}},{q:7,w:0,props:{p:3, messages:[{status:false},{status:false},{status:true}]}}]

let filtered = arr.filter(item => item.props.messages.some(m => m.status === true))
console.log(filtered)

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

Comments

1

Use filter.

var result= items.filter(item =>{
    return item.props.messages.some(obj => obj.status === true)
})

I created this Fiddle: http://jsfiddle.net/81ue32ra/2/

var items = [{q:1,w:2,props:{p:1, messages:[{status:true},{status:false},{status:true}]}},
{q:3,w:5,props:{p:2, messages:[{status:false},{status:false},{status:false}]}},
{q:7,w:0,props:{p:3, messages:[{status:false},{status:false},{status:true}]}}
];

var result = items.filter(item =>{
   return item.props.messages.some(obj => obj.status === true)
});
    
    
console.log(result);

2 Comments

I added your fiddle as a snippet, please run and edit given the syntax issue.
@MarkSchultheiss Thanks, I had already fixed that in the fiddle, not sure why it didn't save.
0

Just filter the main array and check if some of the messages status property is true.

Comments

0

let data = your array;

data.filter(obj => obj.props.messages.some(message => message.status).length > 0)

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.