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

标签 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;
                }
            }

        }
}

最佳答案

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

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

此外,始终在 JS 中使用 === 而不是 == (这可以避免 JS 中相当糟糕的类型强制)。我也不确定 instanceof 语句是否按照您的想法进行操作。您可能想使用:

obj[o].constructor === Object

相反。

关于javascript - JSON 对象中不可预测的层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1290400/

相关文章:

jquery - 如何使用jquery改变点击链接的颜色

javascript - Jquery 悬停在 html 中不起作用

java - JAXB:部分解码返回空域对象

php - 使用按钮使用文本框中的值更新数据库字段,它显示空白值

c# - 脚本不在代码后面工作

javascript - HTML5-可以在没有浏览器的情况下运行吗?

xml - 解析 XML 文件时显示部分内容

xml - 更改元素名称的样式表

javascript - 将内容插入到 innerHTML 中而不清除里面已有的内容

jquery - jQuery AJAX 抛出的 302 错误代码是什么?