我将一组选项作为对象传递:
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"
。我不确定它是否比子对象迭代更有效。
答案 0 :(得分:0)
我会考虑使用两种类型的规则 - 一种使用,一种不使用encodedName属性。 这样,您可以从类别中推断出规则是否包含有问题的属性。
或者我会使用递归函数迭代所有属性以找到您正在寻找的属性
答案 1 :(得分:-1)
你可以迭代options
对象,然后检查每个属性(sortRules,filterRules)是否具有该属性。
for(var rules in options){
if(options[rules].hasOwnProperty("encodedName"){...}
}
应该这样做。
刚发现每个规则属性都是一个数组,在这种情况下,没有其他方法可以迭代它。