所以我对递归函数没有超级经验,但理想情况下,此函数会搜索特定子项的任意深度的对象并返回它,但出于某种原因,当我return r;
得到{{1}时}。
r = undefined
感谢。
答案 0 :(得分:4)
没有理由计算节点的数量,只要它是一个对象,你可以假设一个循环是必要的 - 节省你自己的周期。
这是一个简化版本:
function search(_for, _in) {
var r;
for (var p in _in) {
if ( p === _for ) {
return _in[p];
}
if ( typeof _in[p] === 'object' ) {
if ( (r = search(_for, _in[p])) !== null ) {
return r;
}
}
}
return null;
}
如果找到的对象的值为null
,则会出现问题,同样如果您同样使用false
或0
或-1
。也许最好只构建并返回对象的路径;通过这种方式,您只需要处理一系列字符串,这样可以进行更安全的比较。
更新了工作小提琴:http://jsfiddle.net/RRyRQ/3/