我有一个对象数组,其中有一个嵌套参数,我只想返回那些通过基于该嵌套参数的过滤器的数组元素,而该嵌套参数又是一个对象数组。
[{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}]}
]
感谢您的帮助和建议!
答案 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)