js 数组的处理

    arr1 = [
      {
        label: '系统管理',
        id: 2011,
        children: [
          {
            label: '通讯录',
            id: 2012
          },
          {
            label: '个人资料',
            id: 2014
          }
        ]
      },
      {
        label: '客户及商机管理',
        id: 2024,
        children: [
          {
            label: '线索库',
            id: 2025,
            children: [
              {
                label: "新建线索",
                id: 2031
              }
            ]
          },
          {
            label: "商机库",
            id: 2026,
            children: [
              {
                label: "新建线索",
                id: 2031
              }
            ]
          },
          {
            label: "客户",
            id: 2040
          }
        ]
      }
    ]

需要得到:

    arr2 = [
      {
        label: '客户及商机管理',
        id: 2024,
        children: [
          {
            label: '线索库',
            id: 2025,
            children: [
              {
                label: "新建线索",
                id: 2031
              }
            ]
          },
          {
            label: "商机库",
            id: 2026,
            children: [
              {
                label: "新建线索",
                id: 2031
              }
            ]
          }
        ]
      }
    ]

需要处理arr1 的第三级children有值就返回,没有就过滤掉

阅读 1.5k
2 个回答
function filterData(data, level = 0){
    function filterTreeData(data, level, zindex = 1){
        return data.filter(item => {
            if(zindex >= level){
                return true
            }else if(Array.isArray(item.children)){
                let c = filterTreeData(item.children, level, zindex + 1)
                if(c.length){
                    item.children = c
                }
                return c.length
            }
        })
    }
    data = JSON.parse( JSON.stringify(data) )
    return filterTreeData(data, level, 1)
}

filterData(arr1, 3)

这种方法应该可以

function hasNext(item, level) {
  if(level<=0) {
    return true
  }
  let result = true;
  
  while(--level) {
   result = result && Array.isArray(item.children);
   item 
   if(Array.isArray(item.children) && item.children.length) {
     item = item.children[0]
   }
  }

  return result;
}
arr1.filter(item => hasNext(item,3))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题