怎样判断tree数据中有没有某个字段值

需求:根据某个值判断当前树中的所有label有没有出现过

  • 数据
// 树结构的数据
data: [{
          label: '一级 1',
          children: [{
            label: '二级 1-1',
            children: [{
              label: '三级 1-1-1'
            }]
          }]
        }, {
          label: '一级 2',
          children: [{
            label: '二级 2-1',
            children: [{
              label: '三级 2-1-1'
            }]
          }, {
            label: '二级 2-2',
            children: [{
              label: '三级 2-2-1'
            }]
          }]
        }, {
          label: '一级 3',
          children: [{
            label: '二级 3-1',
            children: [{
              label: '三级 3-1-1'
            }]
          }, {
            label: '二级 3-2',
            children: [{
              label: '三级 3-2-1'
            }]
          }]
        }]
  • 实现方法(递归)
// 判断当前传入的字段值是否存在于树数据中
    function searchTree(nodesArr, searchKey) {
        for (let _i = 0; _i < nodesArr.length; _i++) {
            if (nodesArr[_i].label === searchKey) {
            	// 这个return自己想要的结果就行
                return nodesArr[_i].label
            } else {
                if (nodesArr[_i].children && nodesArr[_i].children.length > 0) {
                	// 如果是vue文件,注意下面换成this.searchTree
                    let res = searchTree(nodesArr[_i].children, searchKey);
                    if (res) {
                        return res
                    }
                }
            }
        }
        return null
    },

当时自己的数据不是一个标准的树数据,是vue2-org-tree插件的适用数据格式,其实区别就是最外层没有[],嵌套结构是一样的,很简单,方法还是一样调用,只在传入data参数时,给data包成array格式传入就行:searchTree([data], searchKey);

你可能感兴趣的:(JavaScript,个人总结,javascript)