const data={ id:'0', value:0, children:[ { id:'1', value:1, children:[ { id:'11', value:11, children:[ { id:'111', value:111, children:[ { id:'1111', value:1111, }, { id:'1112', value:1111, }, ] }, { id:'112', value:112, }, ] }, { id:'12', value:12, }, { id:'13', value:13, children:[ { id:'131', value:131, }, { id:'132', value:132, }, ] }, { id:'14', value:14, }, ] }, { id:'2', value:2, }, { id:'3', value:3, children:[ { id:'31', value:31, }, { id:'32', value:32, }, ] }, { id:'4', value:4, }, ] }; findParentArr(data,'32'); function findParentArr(data,target) { let parentArr=[]; const topData=data; const findTarget=(childNode,target)=>{ for (let i = 0; i < childNode.length; i++) { const currentNode = childNode[i]; if(currentNode.id===target) return currentNode.id; else if(currentNode.children){ const topId=findTarget(currentNode.children,target); if(topId){ parentArr.unshift(topId); return currentNode.id; } } } } const topId=findTarget(topData.children,target); if(topId) parentArr.unshift(topId); parentArr.pop(); parentArr=[topData.id,...parentArr]; console.log(parentArr); return parentArr; } whileSum(data); function whileSum(data){ let sum=0; const topData=data; const stack=[...topData.children]; let tmpNode=null; while(stack.length>0){ tmpNode=stack.pop(); if(!tmpNode) return; sum+=tmpNode.value; if(tmpNode.children &&tmpNode.children.length>0){ for (i=tmpNode.children.length-1; i >=0 ; i--) { stack.push(tmpNode.children[i]); } } } sum+=topData.value; console.log('whileSum:',sum); return sum; }
js数组树形结构(求子节点所有父祖先和while求和)
于 2024-03-18 15:38:34 首次发布
本文介绍了如何在给定的嵌套JSON对象中,使用递归函数找到特定节点(如`32`)的父节点数组,并计算所有节点值的总和。`findParentArr`函数用于查找父节点,`whileSum`函数实现深度优先遍历求和。
摘要由CSDN通过智能技术生成