node+mongodb实现3级树形菜单

router.post('/getJurisdiction', function (req, res) {

  db.find('sys_menu', { type: '0' }, function (err, d) {
    db.find('sys_menu', { type: '1' }, function (err, data) {
      var result = data;
      for (let i = 0; i < result.length; i++) {
        db.find('sys_menu', { parent_id: result[i].menu_id }, function (err, data1) {
          for (var j = 0; j < data1.length; j++) {
            if (result[i].menu_id == data1[j].parent_id) {
              result[i].children = data1
            }
          }
 
          if (i == result.length - 1) {
            //定义一个空数组接收三级菜单
            var newObj2 = [];
            //循环一级菜单
            for (var l = 0; l < d.length; l++) {
              //记录一级菜单的menu_id
              var nameO1 = d[l].menu_id;
              //定义一个空数组,接收2级和3级的数据
              var arr = [];
              for (var k = 0; k < result.length; k++) {
                //记录二级和三级的parent_id
                var nameO2 = result[k].parent_id;
                //判断相等
                if (nameO1 === nameO2) {
                  //把对应的二级和三级菜单push进arr中
                  arr.push(result[k]);
                }
              }
              //把一级菜单的每一项转换成后端使用的字符串格式
              var clonedObj = JSON.parse(JSON.stringify(d[l]))
              //把id对应的二级和三级赋值给对应的一级菜单
              clonedObj.children = arr;
              //把最后的数据push进外部定义的空数组并返回给前段
              newObj2.push(clonedObj);
            }
            res.send(newObj2)
          }
        })
      }
    })
  })
})
posted @ 2020-09-09 10:33  lyl825  阅读(528)  评论(0)    收藏  举报