如何通过js实现搜索菜单栏功能

新手上路,请多包涵

菜单格式如下

[
  {
    "children": [],
    "mText": "一级菜单1"
  },
  {
    "children": [
      {
        "children": [],
        "mText": "二级菜单1"
      },
      {
        "children": [],
        "mText": "二级菜单2"
      }
    ],
    "mText": "一级菜单2"
  },
  {
    "children": [
      {
        "children": [
          {
            "children": [],
            "mText": "三级菜单1"
          },
          {
            "children": [],
            "mText": "三级菜单2"
          }
        ],
        "mText": "二级菜单1"
      },
      {
        "children": [
          {
            "children": [],
            "mText": "三级菜单1"
          }
        ],
        "mText": "二级菜单2"
      }
    ],
    "mText": "一级菜单3"
  }
]
搜索最下一级菜单名称,想得到他的父级、父级的父级、父级的父级的父级……,如搜索 三级菜单1得到如下的数据:
[
  {
    "children": [
      {
        "children": [
          {
            "children": [],
            "mText": "三级菜单1"
          }
        ],
        "mText": "二级菜单1"
      },
      {
        "children": [
          {
            "children": [],
            "mText": "三级菜单1"
          }
        ],
        "mText": "二级菜单2"
      }
    ],
    "mText": "一级菜单3"
  }
]
阅读 2.1k
1 个回答

image.png
image.png

var list = [
  {
    "children": [],
    "mText": "一级菜单1"
  },
  {
    "children": [
      {
        "children": [],
        "mText": "二级菜单1"
      },
      {
        "children": [],
        "mText": "二级菜单2"
      }
    ],
    "mText": "一级菜单2"
  },
  {
    "children": [
      {
        "children": [
          {
            "children": [],
            "mText": "三级菜单1"
          },
          {
            "children": [],
            "mText": "三级菜单2"
          }
        ],
        "mText": "二级菜单1"
      },
      {
        "children": [
          {
            "children": [],
            "mText": "三级菜单1"
          }
        ],
        "mText": "二级菜单2"
      }
    ],
    "mText": "一级菜单3"
  }
]
let findTree = (list=[], keyword='')=> list.filter(item=> {
    item.children = findTree(item.children, keyword);
    return item.children.length || item.mText.includes(keyword);
});
findTree(list,'三级菜单2');

注意:要重新克隆一份数据,不然会修改原先的数据。
list = JSON.parse(JSON.stringify(list))

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