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

时间:2015-10-26 20:31:05

标签: javascript jquery arrays

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

感谢任何帮助。

5 个答案:

答案 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()

&#13;
&#13;
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;
&#13;
&#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);