js 樹形結果數據過濾

廢話不說直接上代碼,
參考博文https://segmentfault.com/q/1010000018197249/a-1020000018203261

 


/// <summary>
/// 過濾樹形結構數據
/// </summary>
/// <param name="nodes">樹形節點數據要求是數組類型</param>
/// <param name="childrenName">child的fieldName</param>
/// <param name="predicate">過濾方法</param>
function filterTreeData(nodes, childrenName, predicate) {
    // 如果已經沒有節點了,結束遞歸
    if (!(nodes && nodes.length)) {
        return [];
    }

    const newChildren = [];
    for (const node of nodes) {
        if (predicate(node)) {
            // 如果節點符合條件,直接加入新的節點集
            newChildren.push(node);
            node[childrenName] = filterTreeData(node[childrenName], childrenName, predicate);
        } else {
            // 如果當前節點不符合條件,遞歸過濾子節點,
            // 把符合條件的子節點提升上來,併入新節點集
            newChildren.push(...filterTreeData(node[childrenName], childrenName, predicate));
        }
    }
    return newChildren;
}
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章