js 获取多维数组最大深度

js yekong

uniapp 微信小程序项目开发中,数据是一个多维数组,这里需要知道这个多维数组的最大深度。首先我们获取其中一个对象的深度。

获取其中一个对象下的深度

可以使用递归来获取带有children字段的多维数组的深度。
以下是一个简单的示例代码:

function getDepth(obj) {
  let depth = 1;
  if (obj.children && obj.children.length > 0) {
    obj.children.forEach(function (d) {
      const tmpDepth = getDepth(d) + 1;
      if (tmpDepth > depth) {
        depth = tmpDepth;
      }
    });
  }
  return depth;
}

该函数接受一个多维数组对象作为参数,通过递归遍历每个元素的children属性,计算出每个子元素的深度,并返回最大深度加1(加1是因为根元素也算一层)。如果某个元素没有children属性,则其深度为1。

遍历

我们对数组进行遍历,获取每个对象的深度,然后将其加入到数组,最后获取这个数组中最大值,就可以了。

getMaxDepth() {
	var that = this;
	var list = [];
	that.list.forEach((type) => {
		list.push(that.getDepth(type))
	});
	const maxNum = Math.max(...list)
	
	console.log(maxNum)
	return maxNum
},	

数组数据

data: [{
	"value": "KHFL1301",
	"label": "大客户",
	"ParentCode": "",
	"children": []
}, {
	"value": "KHFL1302",
	"label": "中级客户",
	"ParentCode": "",
	"children": []
}, {
	"value": "KHFL1303",
	"label": "低端客户",
	"ParentCode": "",
	"children": [{
		"value": "KHFL13031",
		"label": "低端客户1-1",
		"ParentCode": "KHFL1303",
		"children": [{
			"value": "KHFL13031-9",
			"label": "低端客户1-1-101",
			"ParentCode": "KHFL13031",
			"children": []
		}]
	}, {
		"value": "KHFL13032",
		"label": "低端客户2-1",
		"ParentCode": "KHFL1303",
		"children": []
	}]
}]

结果

通过对上面的数据处理,得到的结果是最大深度为3

喜欢