js 去重并统计数量,然后去重后的子级再添加到父级的数组里去。该怎么写呀?

想做到下面这样的效果额。
image.png
自己现在只做到了去重并统计。但是想子级以数组的形式进入对应的父级对象里。
image.png
具体效果就是跟 flomo 这个侧边栏的一级二级目录效果一样。不过多了个统计每个 tag 标签里的数量是多少。

好难呀。求救求救。

分类1   //(这个没有写二级标签)
分类2/二级目录1
分类2/二级目录2
分类2/二级目录3
分类2/二级目录4
分类3  //(这个没有写二级标签)
分类4/二级目录1
分类4/二级目录2
分类4/二级目录3
分类4/二级目录4
分类5  //(这个没有写二级标签)
分类6/二级目录1
分类6/二级目录2
分类6/二级目录3
分类6/二级目录4
阅读 1.4k
1 个回答

整体思路:

  1. 去重并统计子目录数量 //忽略
  2. 获取一级菜单数组、获取子菜单数组
  3. 生成最终的结果(结构自行更改)

demo:

let a =['分类1','分类1/目录1','分类1/目录2','分类2','分类2/目录1','分类2/目录2'] //去重数组

let arr1 = a.filter(e=>!e.includes('/'))//以'/'过滤一级目录
//得到  ['分类1', '分类2']
let arr2 = a.filter(e=>e.includes('/'))//取反过滤得到子菜单
//得到  ['分类1/目录1', '分类1/目录2', '分类2/目录1', '分类2/目录2']

const list = arr1.map(e=>{const list = []
    for (let index = 0; index < arr2.length; index++) {
      const element = arr2[index];
      // 判断是否包含主菜单
      if(element.includes(e)){
        list.push(element)
      }
    }
    const obj = {menu:e,list:list}
    return obj
})
//list = [{"menu":"分类1","list":["分类1/目录1","分类1/目录2"]},{"menu":"分类2","list":["分类2/目录1","分类2/目录2"]}]


撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏