JSON对象中不可预测的层次结构

时间:2009-08-17 20:58:05

标签: javascript xml ajax json dom

构建ajax应用程序时,我通常更喜欢以JSON格式获取远程数据。但是,当层次结构不可预测时(specifically geocoding responses from Google Maps API),使用XML格式很有吸引力,因为DOM方法getElementsByTagName将获取层次结构中的数据。假设只有一个元素/属性具有我感兴趣的标记/名称,以下函数是否与getElementsByTagName等效?怎么改进?

function findProperty(obj,prop){

        for(var p in obj){
            if(p==prop){
                    return obj[p];
            }
            if(obj[p] instanceof Object){
                var tmp = findProperty(obj[p],prop);
                if(tmp){
                    return tmp;
                }
            }

        }
}

1 个答案:

答案 0 :(得分:2)

您的函数看起来像是一个非常直接的线性搜索,许多DOM遍历函数都会这样做。也就是说,您应该添加hasOwnProperty检查以避免从原型树获取属性。 e.g。

for(var p in obj) {
   if(obj.hasOwnProperty(p)) {
      ...
   }
}

此外,总是在JS中使用===而不是==(这避免了JS中相当糟糕的类型强制)。我也不确定instanceof语句是否符合你的想法。您可能想要使用:

obj[o].constructor === Object

代替。