在构建 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/