我有一个ajax jquery函数,它使用包含标签和值的每个元素填充数组:
var accountOptions = new Array();
$.ajax({
type: "GET",
url: apiUrl+"/Accounts/GetDropdown",
async: false,
success:
function (response) {
$.each(response.Data, function (i, item) {
accountOptions.push({ label: item.Number, value: item.Id })
});
}
});
此函数工作正常,但我需要通过在数组中搜索它来找到给定标签(帐号)的值(Id)。最有效的方法是什么?
感谢任何帮助。
答案 0 :(得分:1)
在javascript中使用filter函数
// options is an array, if you're sure the result is only one use options[0].value, if not you will have to iterate it
var options = accountOptions.filter(function(account) {
return account.label === 'label-you-are-looking-for';
});
答案 1 :(得分:1)
JavaScript数组.filter()
方法将数组简化为仅满足return
语句中给定条件的元素。试试这个:
var id = accountOptions.filter(function(v) {
return v.Number == '<Number>';
})
[0].id;
var accountOptions = [
{'Number': '098979','id':98},
{'Number': '098887','id':99},
{'Number': '089878','id':97}
];
//get id for Number, '098887'
var id = accountOptions.filter(function(v) {
return v.Number == '098887';
})
[0].id;
console.log( id );
答案 2 :(得分:0)
最有效的方法是在收到响应时构造一个哈希表:
var accountOptions = [];
var accountsById = {}; // added
....
$.each(response.Data, function(i, item) {
accountOptions.push({ label: item.Number, value: item.Id });
accountsById[ item.Number ] = item.id; // added
});
(如果可能有多个结果,请改为推送到数组:
accountsById[ item.Number ] = ( accountsById[ item.Number ] || [] ).push( item.id );
)
获取值:
var id = accountsById[ label ];
效率
也就是说,就CPU时钟周期和内存访问而言,它是最有效的。到目前为止,所有其他答案都需要额外传递数据。对于单个查找,差异可以忽略不计,但对于第二次查找,它是相当大的,因为每次查找都需要迭代所有数据并对其执行字符串比较,而使用哈希表与访问对象字段一样快。
维护代码方面最有效的解决方案是要求您进行最少更改的解决方案,并且通常是最短的解决方案;理想情况下是单线。
在依赖关系管理方面,最好使用本地Array.filter
,而不是使用提供必须下载,解析和编译的相同功能的第三方库。
答案 3 :(得分:0)
尝试使用$.grep()
var accountOptions = [{
label: 123,
value: "abc"
}, {
label: 123,
value: "def"
}]
var id = "abc";
var res = $.grep(accountOptions, function(item) {
return item.value === id
})[0];
console.log(res.value)
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
&#13;
答案 4 :(得分:0)
//finds the index of the object you want
function findInArray(theArray, searchFor, property) {
var retVal = -1;
var self = theArray;
for(var index=0; index < self.length; index++){
var item = self[index];
if (item.hasOwnProperty(property)) {
if (item[property].toLowerCase() === searchFor.toLowerCase()) {
retVal = index; //or retVal = value if that's what you want
return retVal;
}
}
};
return retVal;
};
这样称呼:
findInArray(accountOptions, "whatever label you want", label);