怎么把这个data1数组改造成data2数组,相当于过滤其中isShow=false的对象?

作者站长头像
站长
· 阅读数 19
let data1=[
      {
        isShow:true,
        children:[
          {
            isShow:true,
            nodeName:'天天下级文件夹',
            children:[
              {
                isShow:true,
                nodeName:'天天下下级文件夹',
                children:[]

              },
              {
                isShow:false,
                nodeName:'天天下下级文件夹2',
                children:[]

              },
            ]
          },
          {
            isShow:false,
            nodeName:'lala',
            children:[]
          }
        ],
        nodeName:'天天文件夹',
      },
      {
        isShow:true,
        nodeName:'一样',
        children:[]

      },
      {
        isShow:false,
        nodeName:'不一样',
        children:[]
      }
    ]

想要改造成以下这种

   let data2=[
       {
        isShow:true,
        children:[
          {
            isShow:true,
            nodeName:'天天下级文件夹',
            children:[
              {
                isShow:true,
                nodeName:'天天下下级文件夹',
                children:[]

              },
            ]
          },
        ],
        nodeName:'天天文件夹',
      },
      {
        isShow:true,
        nodeName:'一样',
        children:[]

      },
     
    ]
回复
1个回答
avatar
test
2024-06-26

用filter过滤,再加个递归就行了

function filterData(data){
    return data.filter(item => {
        if(item.isShow) {
            return true;
        } else if(item.children && item.children.length) {
            const res = filterData(item.children);
            if(res.length){
                item.children = res;
                return true;
            }
        }
        return false;
    })
}
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容