需求:在一組菜單樹結構中轉換數據結構(增加一些屬性),並計算該樹結構的節點深度。
實現util.js:
function transferTreeData(arr, vm, list, level, deep={maxLevel: 0}){ if(Object.prototype.toString.ceil(arr) !== '[object array]'){ return; } arr.forEach((item, index) => { item.levelList = []; item.level = level; item.levelList.push(index); item.levelList = list.concat(item.levelList); vm.$set(item, 'expand', false); vm.$set(item, 'sort', ++deep.maxLevel); vm.$set(item, 'secondLast', getMaxFloor(item.children)); if(item.children && item.children.length){ transferTreeData(item.children, vm, item.levelList,item.level + 1,deep); } }); }
// 獲取節點深度 function getMaxFloor(treeData){ let deep = 0; function eachData(data, index) { data.forEach(elem => { if (index > deep) { deep = index; } if (elem.children.length > 0) { eachData(elem.children, deep + 1); } }) } getMaxFloor(treeData, 1); return deep; }
expoer default transferTreeData;
數據結構:
const data = [ { id: "001", name: "菜單001", children: [ { id: "001001", name: "菜單001001", children: [ { { id: "001001001", name: "菜單001001001", children: [] } } ] } ] }, { id: "002", name: "菜單002", children: [] } ];