1

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

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

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

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

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

4

2 回答 2

0

我会考虑使用两种类型的规则 - 一种有和没有编码名称属性。这样,您可以从类别中推断规则是否包含相关属性。

或者,我会使用递归函数遍历所有属性以找到您要查找的属性

于 2013-09-29T22:04:07.333 回答
-1

您可以遍历options对象,然后检查每个属性(sortRules、filterRules)是否具有该属性。

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

应该这样做。

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

于 2013-09-29T22:03:32.623 回答