访问javascript中对象数组中的字段值

时间:2013-10-04 14:22:40

标签: javascript arrays

我需要在这个类型为possibleOptions的对象数组中为cdOption字段访问具有特定字段值的元素:

[Object { cdOption="OPT001", description="Description 1", type="STRING"}, 
Object { cdOption="OPT002", description="Description 2", type="STRING"},
Object { cdOption="OPT003", description="Description 3", type="STRING"}]

我正在寻找的字段值是从数组中的antoher对象中提取的,所以我在$ .each循环中。 我可以避免进入另一个循环以循环possibleOptions对象并查找指定的字段值吗?

我试过了 possibleOptions[option.cdOpzione]但它不起作用,有没有办法做到这一点?我知道我错过了什么。

当前$ .each代码:

$.each(oldOptions, function(key, option) {    
    $.each(possibleOptions, function(key, possibleOption) {

        if (option.cdOption === possibleOptions.cdOption) {
            console.log(option.cdOption);
            console.log(possibleOption.description);
        }
    });
});

2 个答案:

答案 0 :(得分:3)

以通用方式,您无法避免额外的周期。但是,根据您的具体情况,可能会有特定的解决方案。

解决方案1 ​​

如果重新构建数据,可以避免使用它,将possibleOptions作为一个对象,将cdOption中的值作为键,将对象作为描述并输入值作为值。

示例:

var possibleOptions = {
  'OPT001' : { description:"Description 1", type:"STRING" },
  'OPT002' : { description:"Description 2", type:"STRING" },
  'OPT003' : { description:"Description 3", type:"STRING" }
};

var val = 'OPT002';
console.log(possibleOptions[val]);

解决方案2

如果cdOption的形式总是OPT-index-其中-index-是1+,那么你可以做的另一件事就是数组中的索引是解析你正在寻找的值,提取-index-,parseInt并减去一个。

示例:

var val = 'OPT002';
var index = parseInt(val.substring(3))-1;
console.log(possibleOptions[index]);

演示http://jsbin.com/opojozE/1/edit

答案 1 :(得分:1)

Array.filter可以返回与条件匹配的元素数组。例如如果你想找到cdOption == "OPT002"的对象(或多个对象),你可以说:

 var matches = possibleOptions.filter(
    function( element ) {
      return ( "OPT002" == element.cdOption );
    }
 );

matches将包含:

 [ 
   { cdOption="OPT002", description="Description 2", type="STRING"}
 ]

如果您只是在寻找一场比赛:

 var myOption = (matches.length > 0) ? matches[0] : null;

如果您需要支持缺少Array.filter的旧浏览器,请在MDN上查看Array filter method以获取添加方式。