CNode

nodejs 递归问题

Lleeson发布于13 年前最后回复13 年前5 回复11883 浏览0 收藏

result = [ { cid: 59, pid: 0, name: 'PHP' }, { cid: 19, pid: 0, name: 'C++' }, { cid: 20, pid: 19, name: 'STL' }, { cid: 21, pid: 19, name: 'MFC' }, { cid: 60, pid: 59, name: 'Zend Framework' } ];

function test(result, pid) { rtn = []; for(i in result) { if(result[i].pid == pid) { result[i].children = test(result, result[i].cid); rtn.push(result[i]); } } return rtn; }

tree = test(result, 0); console.log(tree); // 结果却是下边这样 [ { cid: 60, pid: 59, name: 'Zend Framework', children: [ [Circular], [Circular] ] }, { cid: 60, pid: 59, name: 'Zend Framework', children: [ [Circular], [Circular] ] } ]

由test递归调用将result元数据组成树状,可是结果却不正确,请教!!!,还有,其中children里的值是“Circular”是什么意思?

查看回复

回复 (5)

Y
yusk013#3·13 年前

[Circular] simply means circular reference.

var o = {
    "self": o
}

Is shown as

{
    "self": [Circular]
}

It could be shown as

{
    "self": {
         "self": {
              "self": {
                   ...
              }
         }
    }
}
Y
yusk013#4·13 年前

兄弟呀,你坑死我了,我被你的代码带到坑里了。

你为什么声明变量的时候不带var那?不带var的话,就会变成全局变量,就会导致数据在迭代之后,就乱掉了。

总共3个地方没有带var,带上就完全正确了。

参与回复
登录后即可参与回复。登录