按给定标签在javascript数组中查找值

按给定标签在javascript数组中查找值,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有一个ajax jquery函数,它使用包含标签和值的每个元素填充数组: var accountOptions = new Array(); $.ajax({ type: "GET", url: apiUrl+"/Accounts/GetDropdown", async: false, success: function (response) { $.each(response.Da

我有一个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)。最有效的方法是什么

非常感谢您的帮助。

使用javascript中的函数

// 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';
});

最有效的方法是在收到响应时构造哈希表:

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时钟周期和内存访问方面是最有效的。到目前为止,所有其他答案都需要额外传递一次数据。对于单个查找,差异可以忽略不计,但对于第二个查找,差异很大,因为每个查找都需要迭代所有数据并对其执行字符串比较,而使用哈希表与访问对象字段一样快

在维护代码方面,最有效的解决方案是要求您进行最少更改的解决方案,并且通常是最短的解决方案;理想情况下,一个班轮。 在依赖关系管理方面,使用本机
数组.filter
比使用第三方库更好,后者提供了与下载、解析和编译相同的功能。

尝试使用
$.grep()

var账户选项=[{
标签:123,
价值:“abc”
}, {
标签:123,
值:“def”
}]
var id=“abc”;
var res=$.grep(accountOptions,函数(项){
return item.value==id
})[0];
console.log(res.value)

JavaScript数组
.filter()
方法将数组简化为满足
return
语句中给定条件的元素。试试这个:

var id = accountOptions.filter(function(v) {
    return v.Number == '<Number>';
})
[0].id;

@冈萨罗未指明——OP称“价值”。我怀疑id和帐号都是唯一的。否则,
(accountsById[item.Number]| |=[])。推送(item.id)
将解决此问题。
findInArray(accountOptions, "whatever label you want", label);
var id = accountOptions.filter(function(v) {
    return v.Number == '<Number>';
})
[0].id;