我遇到了这个挑战,我想返回一个包含对象的数组,其中控件数组在其子对象的“ value”属性中具有值。
除此之外,它还应该删除控件数组中没有值的对象
const data = [
{
'groupName': '1',
'controls': [
{'value': ''},
{'value': ''}
]
},
{
'groupName': '2',
'controls': [
{'value': ''},
{'value': '2'}
]
}
];
const result = data.filter(cl => {
return cl.controls.some(r => {
return r.value !== '';
});
});
console.log(result);
结果是这个
[
{
'groupName': '2',
'controls': [
{'value': ''},
{'value': '2'}
]
}
];
但我希望是这样
[
{
'groupName': '2',
'controls': [
{'value': '2'}
]
}
];
答案 0 :(得分:2)
使用嵌套的filter()
而不是some()
const data = [{groupName:"1",controls:[{value:""},{value:""}]},{groupName:"2",controls:[{value:""},{value:"2"}]}];;
const result = data.filter(cl => {
cl.controls = cl.controls.filter(r => {
return r.value !== '';
});
return cl.controls.length
});
console.log(result);
注意:它会更改原始数组。您可以使用Array.from(data).filter(...)
来避免它