按照pid分組,分組可以大大減少遞迴次數。。(array分組的最好方式是用物件接收array的項,該物件的key值就是分組憑證)
按照pid和id的匹配 遞迴 已分組的資料。
/**
* array轉樹形結構的演算法
* @params list 代轉化陣列
* @params parentid 起始節點(預設為'0')
* @params pkey 父節點key值。預設pid
* @params ckey 當前節點唯一標誌。預設id
*/export
function
gettrees
(list, parentid =
'0', pkey =
'pid'
, ckey =
'id'
)// 獲取每個節點的直屬子節點,*記住是直屬,不是所有子節點
for(
let i =
0; i < list.length; i++
)else
}return
formattree
(items, parentid, ckey)
}// 利用遞迴格式化每個節點
function
formattree
(items, parentid, ckey)
for(
let t of items[parentid]
) result.
push
(t)}
return result
}
使用深度優先演算法,遞迴按照層級查詢
找到指定節點,返回路徑
/**
* 根據節點值查詢樹形結構中的路徑
* @param value 節點的值
* @param tree 樹形結構
* @param attr 匹配值的屬性
* @param childattr 匹配子節點陣列的屬性
*/export
function
findtreepath
(value, tree, attr =
'id'
, childattr =
'children')if
(tree.length ===0)
return
for(
let i =
0; i < tree.length; i++)if
(item[childattr])}
}return
}/**
* 查詢樹的指定節點
* @param value 節點的值
* @param tree 樹形結構
* @param attr 匹配值的屬性
* @param childattr 匹配子節點陣列的屬性
*/export
function
findtreenode
(value, tree, attr =
'id'
, childattr =
'children')if
(tree.length ===0)
return
for(
let i =
0; i < tree.length; i++)if
(item[childattr])}
}return
null
}
js實現樹形結構
js實現樹形結構 1 html 2 js載入資料 function function loadtree ul thirdli ul li ul li 查詢所有一級節點下的 如果找到,則給 節點中除了最後乙個節點以外的節點加浮動,如果沒有 則給所有的二級加浮動 for var i 0 i parent...
js遞迴生成樹形結構
後端獲取json陣列,成樹結構,下面直接上 首先集合的資料格式是這樣的。資料 生成樹結構 load generateoptions params parent.children this.getchilds param.id,params 獲取子節點 result.push parent retur...
js遍歷樹形結構方法
let nodelist 這個方法比較常見,第一點就是你需要用額外的變數儲存最後的結果,第二點就是可遞迴的條件是當前訪問節點具有子節點,nodelist的children屬性便是記錄了子節點資料,我們不僅要判斷children是否存在,還得判斷children的長度是否為空。在函式中寫上預設值是乙個...