UNPKG

es-grid-template

Version:

es-grid-template

34 lines (33 loc) 877 B
import isLeafNode from "./isLeafNode"; /** * Traverses all nodes and collects them into an array. * The `order` parameter can be used to specify the traversal strategy: * * `pre` - Pre-order traversal (default) * * `post` - Post-order traversal * * `leaf-only` - Ignore internal nodes and collect only leaf nodes */ export default function collectNodes(nodes, order = 'pre') { const result = []; dfs(nodes); return result; function dfs(vals) { if (vals == null) { return; } for (const node of vals) { if (isLeafNode(node)) { result.push(node); } else { if (order === 'pre') { result.push(node); dfs(node.children); } else if (order === 'post') { dfs(node.children); result.push(node); } else { dfs(node.children); } } } } }