数据结构过滤

用户名

我有一个具有这种结构的对象数组:

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级对象。如何修改我的代码?

qiAlex

您可以再添加一个循环并使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章