const ArrToTrees = (items) => { for (let i = 0; i < items.length; i++) { for (let j = 0; j < items.length; j++) { // parentId为null表示没有父节点 即根节点 if ( items[i].parentId !== null && items[i].parentId !== '' && items[i].parentId === items[j].systemid ) { if (!(items[j].children instanceof Array)) { // children初始化 items[j].children = []; } items[j].children.push(items[i]); } } } // 返回所有的根节点构成的森林 return items.filter((item) => item.parentId === 'root'); };上述中的每项items是常见后台返回的带有parentid 以及自身的systemid,若是根元素,则其父元素ID为root。 通过上面的函数整合,即可将此树形数据整合成我们需要的UI控件需要的格式的数据。
若要根据根节点以及其下的所有子节点的对象中包含的某项特性即拥有某个属性统计出当前根节点拥有的这些个数。 如下
const generateList = (childrenData, data) => { let subCount = 0; for (let i = 0; i < childrenData.length; i++) { const node = childrenData[i]; if (node.children) { const subChildCount = generateList(node.children, node); subCount += subChildCount; } else if (node.docId) { subCount += 1;
} } if (data) { // data.cname = `${data.cname}(${subCount})`; data.docCount = subCount; } return subCount; };
generateList(resultData);