-
-
Save 8qwe24657913/e5f42dde7d279ce1534528b4570f9cfc to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 1. 对象唯一,正确处理循环引用 | |
let str = '[{"name":"a","description":"a","type":"string","son":[1]},{"name":"b","description":"b","son":[2],"type":"string"},{"name":"c","description":"v","son":[],"type":"string"},{"name":"d","description":"d","son":[],"type":"string"}]', | |
nodes = JSON.parse(str), | |
result = {}; | |
for (let node of nodes) node.val = {}; | |
for (let node of nodes) { | |
for (let index of node.son) { | |
let subNode = nodes[index]; | |
node.val[subNode.name] = subNode.val; | |
subNode.refrenced = true; | |
} | |
} | |
for (let node of nodes) { | |
if (!node.refrenced) result[node.name] = node.val | |
} | |
console.log(result); | |
// 2. 对象不唯一,循环引用?爆栈不谢 | |
let str = '[{"name":"a","description":"a","type":"string","son":[1]},{"name":"b","description":"b","son":[2],"type":"string"},{"name":"c","description":"v","son":[],"type":"string"},{"name":"d","description":"d","son":[],"type":"string"}]', | |
nodes = JSON.parse(str), | |
result = {}; | |
function resolve(node, parent) { | |
let object = parent[node.name] = {}; | |
for (let index of node.son) resolve(nodes[index], object); | |
} | |
for (let node of nodes) { | |
for (let index of node.son) nodes[index].refrenced = true; | |
} | |
for (let node of nodes) { | |
if (!node.refrenced) resolve(node, result); | |
} | |
console.log(result); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment