Skip to content

Instantly share code, notes, and snippets.

@8qwe24657913
Created August 8, 2017 10:40
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save 8qwe24657913/e5f42dde7d279ce1534528b4570f9cfc to your computer and use it in GitHub Desktop.
Save 8qwe24657913/e5f42dde7d279ce1534528b4570f9cfc to your computer and use it in GitHub Desktop.
// 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