我有一个具有这种结构的对象数组:
const dataset = [
{
title: "AA",
demos: [
{name: "aa1", data: [], options: [], toShow: false},
{name: "aa2", data: [], options: [], toShow: true},
{name: "aa3", data: [], options: [], toShow: true},
]
},
{
title: "BB",
demos: [
{name: "bb1", data: [], options: [], toShow: false},
{name: "bb2", data: [], options: [], toShow: false},
]
},
{
title: "CC",
demos: [
{name: "cc1", data: [], options: [], toShow: true},
{name: "cc2", data: [], options: [], toShow: true},
{name: "cc3", data: [], options: [], toShow: true},
{name: "cc4", data: [], options: [], toShow: true},
{name: "cc5", data: [], options: [], toShow: false},
]
}
]
因此,基本上是1级对象的数组,其中有2级对象的demos数组。
这是我想获得的:
const datasetFiltered = [
{
title: "AA",
demos: [
{name: "aa2", data: [], options: [], toShow: true},
{name: "aa3", data: [], options: [], toShow: true},
]
},
{
title: "CC",
demos: [
{name: "cc1", data: [], options: [], toShow: true},
{name: "cc2", data: [], options: [], toShow: true},
{name: "cc3", data: [], options: [], toShow: true},
{name: "cc4", data: [], options: [], toShow: true},
]
}
]
我想用过滤toShow
并删除所有对象toShow = false
。如果1级对象的所有2级对象都带有toShow = false
,那么我也要删除1级对象。
这是我尝试的:
const datasetFiltered = dataset.map(level1 => {
level1.demos = level1.demos.filter(demo => demo.toShow);
return level1;
});
它可以工作,但是如果没有子对象,则不会删除1级对象。如何修改我的代码?
您可以再添加一个循环并使用empy演示过滤掉level1对象
const dataset = [
{
title: "AA",
demos: [
{name: "aa1", data: [], options: [], toShow: false},
{name: "aa2", data: [], options: [], toShow: true},
{name: "aa3", data: [], options: [], toShow: true},
]
},
{
title: "BB",
demos: [
{name: "bb1", data: [], options: [], toShow: false},
{name: "bb2", data: [], options: [], toShow: false},
]
},
{
title: "CC",
demos: [
{name: "cc1", data: [], options: [], toShow: true},
{name: "cc2", data: [], options: [], toShow: true},
{name: "cc3", data: [], options: [], toShow: true},
{name: "cc4", data: [], options: [], toShow: true},
{name: "cc5", data: [], options: [], toShow: false},
]
}
]
const datasetFiltered = dataset.map(level1 => {
level1.demos = level1.demos.filter(demo => demo.toShow);
return level1;
}).filter(level1 => level1.demos.length); // you can just add one more loop and filter out level1 objects with empy demos
console.log(datasetFiltered);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句