我需要在这个类型为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);
}
});
});
答案 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]);
答案 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以获取添加方式。