扫码关注官方订阅号
光阴似箭催人老,日月如移越少年。
function plainJSON(root, node, queue, level) { var nodeIndex = -1; queue.push({ level: level, self: root }); if (!!root.children) { root.children.map((child) => { const i = plainJSON(child, node, queue, level + 1); if (i >= 0) nodeIndex = i; }) } if (root === node) { nodeIndex = queue.length - 1; } return nodeIndex; } function removeChildren(parent, child) { if (!parent.children) return -1; const index = parent.children.indexOf(child); (index >= 0) && parent.children.splice(index, 1); return index; } function isArray(o) { return Object.prototype.toString.call(o) === '[object Array]'; } function dfs(_key,o){ if(o.name && _key == o.name) return o; if(o.children) { for (var v in o.children) { var r = dfs(_key,o.children[v]); if(r) return r; } } } function revertTree(data, node) { const queue = []; const qIndex = plainJSON(data, node, queue, 0); if (qIndex < 0) return null; const keyNodeLevel = queue[qIndex].level; var levelCursor = keyNodeLevel - 1; var nodePath = [qIndex]; for (var i = qIndex - 1; i >= 0; i--) { if (queue[i].level === levelCursor) { levelCursor--; nodePath.push(i); } } for (var i = 0, until = nodePath.length - 1; i < until; i++) { var parent = queue[nodePath[i + 1]].self, child = queue[nodePath[i]].self; removeChildren(parent, child); child.children = child.children || []; child.children.push(parent); } return queue[qIndex].self; } function revert(data, key) { return revertTree(data,dfs(key,data)); }
测试
var data = { "name": "18912386146", "size": 45, "children": [ { "name": "13811179796", "size": 10 }, { "name": "18511331067", "size": 10 }, { "name": "18631867507", "size": 10 }, { "name": "18616261983", "size": 45, "children": [ { "name": "13811179796", "size": 10 }, { "name": "18995390312", "size": 10 } ] }, { "name": "13466692515", "size": 10 }, { "name": "13650731515", "size": 45, "children": [ { "name": "13811179796", "size": 10 }, { "name": "13037986580", "size": 10 }, { "name": "18995390312", "size": 10 } ] }, { "name": "15809619551", "size": 10 }, { "name": "18601191669", "size": 10 }, { "name": "15909638715", "size": 10 }, { "name": "15909619055", "size": 10 }, { "name": "18902266418", "size": 63, "children": [ { "name": "13560047280", "size": 63 }, { "name": "13632270695", "size": 10 }, { "name": "13650731515", "size": 45 }, { "name": "13268069280", "size": 167 } ] }, { "name": "13037986580", "size": 10 }, { "name": "18995390312", "size": 10 } ] } function cloneData () { return JSON.parse(JSON.stringify(data)); } var dataCopy1 = cloneData(); console.log( JSON.stringify(revert(dataCopy1, "13268069280"), null, 4) );
搞定收工!
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
测试
搞定收工!