js算法算出数组或对象深度
算出数组里面还有多少个数组或对象
算出对象里面还有多少个对象或数组
有时候我们要计算数组或对象里面包含了多少个嵌套数组或对象,我这里称为深度,文字不好理解 演示一下数据格式
const a = {
a:1,
b:2,
c:{a:1},
d:{a:{a:1}}
}
//这个最大深度就为3,a对象包含了c,此时深度为2,但d又包含了一个对象,这时我称为深度为3
递归
递归我就不介绍了,该算法就是利用函数递归
function getDeep(obj) {
let res = 1
// 递归函数
function fn(obj) {
let arr = []
let arrLength = arr.length
// 先遍历是不是里面还有对象类型,是就计数
for (let item in obj) {
if (typeof (obj[item]) === 'object') {
// 然后把这个再存到数组中下次遍历
// arr.push([...obj[item]])
// 要分别存入,否则下次死循环
for (let key in obj[item]) {
arr.push(obj[item][key])
}
}
}
// 循环结束后判断arr有没有增加
if (arr.length > arrLength) {
res++
arrLength = arr.length
// 继续递归
return fn(arr)
} else return res
}
return fn(obj)
}
该算法使用的fon in 循环,同样适用于求数组深度,
例如
const arr = [
1,2,3,{a:[1,2,3]}
]
getDeep(arr)//3
arr里面包含了一个对象也就是arr[3],此时深度为2,arr[3]又包含了一个数组,深度为3
我觉得肯定还有改进的地方,希望有大佬可以指点