X.Q*_*ang 2 javascript traversal object
我需要从JSON对象获取引用,代码如下:
var Tree = {
data: {
0: {
pk: 1,
},
1: {
pk: 2,
},
2: {
pk: 3,
children: {
0: {
pk: 11,
},
1: {
pk: 22,
},
2: {
pk: 33,
},
},
},
},
traverse: function(data, pk) {
for (i in data) {
// console.log(data[i]);
if(data[i].pk && data[i].pk == pk)
return data[i];
if (typeof(data[i].children) == 'object')
this.traverse(data[i].children, pk);
};
},
}
遍历顶级项目时,代码运行良好:
>>> Tree.traverse(Tree.data, 1);
Object {pk=1}
但是当得到子元素时坏了:
>>> Tree.traverse(Tree.data, 22); undefined
当你取消注释'// console.log(data [i]);'时,我很奇怪为什么会出现这种情况?你会看到该对象已被获取但未返回.
有什么想法吗?
你没有把return之前this.traverse(data[i].children, pk);.
编辑:
var Tree = {
data: {
0: {
pk: 1,
},
1: {
pk: 2,
},
2: {
pk: 3,
children: {
0: {
pk: 11,
},
1: {
pk: 22,
},
2: {
pk: 33,
},
},
},
},
traverse: function(data, pk) {
for (var i in data) {
// console.log(data[i]);
if(data[i].pk && data[i].pk == pk)
return data[i];
if (typeof(data[i].children) == 'object') {
var retVal = this.traverse(data[i].children, pk);
if (typeof retVal!='undefined') {//here was the logical problem,there might be more than one
//object, we can't return the result of traversing first one.
//So we will check, if no return, we go on searching
return retVal;
}
}
};
},
};
alert(Tree.traverse(Tree.data, 1).pk);
alert(Tree.traverse(Tree.data, 22).pk);
Run Code Online (Sandbox Code Playgroud)
在这里查看:http://jsfiddle.net/rq4LK/