在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML5  HTML/ js如何獲取tree型數(shù)組的最大深度呢?

js如何獲取tree型數(shù)組的最大深度呢?

js如何獲取tree型數(shù)組中當(dāng)前項(xiàng)的最大深度呢?

const treeData = [
    {
        key: 'tree1',
        children: [
            {
                key: 'tree2',
                children: [
                    {
                        key: 'tree3',
                        children: [
                            {
                                key: 'tree4'
                            }
                        ]
                    }
                ]
            },
            {
                key: 'tree5'
            }
        ]
    },
    {
        key: 'tree6'
    },
    {
        key: 'tree7'
    }
]

想獲得的結(jié)果

console.log(getMaxDepthByKey('tree1',treeData))  結(jié)果為3
console.log(getMaxDepthByKey('tree2',treeData))  結(jié)果為2
console.log(getMaxDepthByKey('tree3',treeData))  結(jié)果為1
console.log(getMaxDepthByKey('tree4',treeData))  結(jié)果為0
console.log(getMaxDepthByKey('tree5',treeData))  結(jié)果為0
console.log(getMaxDepthByKey('tree6',treeData))  結(jié)果為0
console.log(getMaxDepthByKey('tree7',treeData))  結(jié)果為0
回答
編輯回答
愚念

參照樓上的修改了一下,嘻嘻

var deep = 0;
function getMaxDepthByKey(str, data) {
    for (var i = 0; i < data.length; ++i) {
        if (str === data[i].key) {
            deep = getDeep(data[i]);
            break;
        } else {
            if (data[i].hasOwnProperty('children')) {
                getMaxDepthByKey(str, data[i].children);
            }
        }
    }
    return deep;
}
var maxLen = [];
function getDeep(data) {
    if (data.hasOwnProperty('children')) {
        maxLen[data.key] = 0;
        for (let item of data.children)
            maxLen[data.key] = Math.max(maxLen[data.key], getDeep(item) + 1);
        return maxLen[data.key];
    } else {
        return 0;
    }
}
console.log(getMaxDepthByKey('tree1', treeData));//3
console.log(getMaxDepthByKey('tree2', treeData));//2
console.log(getMaxDepthByKey('tree3', treeData));//1
console.log(getMaxDepthByKey('tree4', treeData));//0
console.log(getMaxDepthByKey('tree5', treeData));//0
console.log(getMaxDepthByKey('tree6', treeData));//0
console.log(getMaxDepthByKey('tree7', treeData));//0
2018年5月3日 09:08
編輯回答
赱丅呿

手機(jī)不太方便大概是這么想的根據(jù)樹(shù)做數(shù)組,然后再算

t1
  t2
    t3
      t4
  t5
t6
t7


[
  [t1 t2 t3 t4]
  [t1 t5]
  [t6]
  [t7]
]

更改結(jié)構(gòu)后應(yīng)該說(shuō)從思路上會(huì)清晰,但速度可能不快

2017年9月30日 06:09
編輯回答
小曖昧

經(jīng)典的深度優(yōu)先搜索,只有一個(gè)數(shù)據(jù)么,如果是的話,可以預(yù)處理下:

let ans = {}

function getMaxDepthByKey(treeData) {
  for (let item of treeData) {
    getDepth(item)
  }

  function getDepth(obj) {
    if (obj.hasOwnProperty('children')) {
      ans[obj.key] = 0
      for (let item of obj.children)
        ans[obj.key] = Math.max(ans[obj.key], getDepth(item) + 1) 
      return ans[obj.key]
    } else {
      ans[obj.key] = 0
      return 0
    }
  }
}

getMaxDepthByKey(treeData)

console.log(ans['tree1']) // 3
console.log(ans['tree2']) // 2
console.log(ans['tree3']) // 1
console.log(ans['tree4']) // 0
console.log(ans['tree5']) // 0
console.log(ans['tree6']) // 0
console.log(ans['tree7']) // 0

但是題主對(duì)調(diào)用方式做了固定,稍微改下即可

2017年11月15日 02:12
編輯回答
孤影
// 我再改改 
2018年6月19日 19:00