查找对象树是否具有给定属性

时间:2013-09-29 21:59:20

标签: javascript object hasownproperty

我将一组选项作为对象传递:

var options={
    sortRules:[
        {...}, // rule 1
        {...}, // rule 2
        // etc.
    ],
    filterRules:[
        {...}, // rule 1
        {...}, // rule 2
        // etc.
    ],
    etc.
};

我的问题:如果任何规则包含“encodedName”属性,我需要通过Web服务检索ASAP代码字典。如果没有传递“encodedName”属性,则不需要字典。

检查此对象层次结构中是否存在“encodedName”属性的最有效方法是什么?循环遍历所有对象和子对象听起来很痛苦,我想知道是否有更快的方法。

[edit]:也许我应该提到我的另一个想法:使用JSON.stringify将对象转换为字符串,然后使用indexOf搜索"encodedName"。我不确定它是否比子对象迭代更有效。

2 个答案:

答案 0 :(得分:0)

我会考虑使用两种类型的规则 - 一种使用,一种不使用encodedName属性。 这样,您可以从类别中推断出规则是否包含有问题的属性。

或者我会使用递归函数迭代所有属性以找到您正在寻找的属性

答案 1 :(得分:-1)

你可以迭代options对象,然后检查每个属性(sortRules,filterRules)是否具有该属性。

for(var rules in options){
    if(options[rules].hasOwnProperty("encodedName"){...}
}

应该这样做。

刚发现每个规则属性都是一个数组,在这种情况下,没有其他方法可以迭代它。