基于嵌套属性的过滤数组

时间:2018-07-27 20:33:55

标签: javascript arrays

我有一个对象数组,其中有一个嵌套参数,我只想返回那些通过基于该嵌套参数的过滤器的数组元素,而该嵌套参数又是一个对象数组。

[{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}]}
]

我的目的是仅过滤那些包含至少一条状态为true的消息的对象。 在这个例子中,我期望得到两个对象的数组

[{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}]}
]

感谢您的帮助和建议!

4 个答案:

答案 0 :(得分:3)

some()将让您至少检查一次条件是否成立。您可以使用它来过滤: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)

答案 1 :(得分:1)

使用过滤器。

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

我创建了这个小提琴: 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 :(得分:0)

filter主数组,并检查message status属性的some是否为真。

答案 3 :(得分:0)

让数据=您的数组;

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