在数组中查找值

时间:2015-04-17 00:23:55

标签: javascript jquery arrays google-maps-api-3

我试图找到一个对象是否包含某个值,然后指示该操作的后续步骤。这是从Google Maps API返回的对象。这是从他们的API返回的一个确切示例。

数组

[{'long_name': 'United States', 'short_name': 'US'}, {'long_name': 'California', 'short_name': 'CA'}];

条件/检查

if( $.inArray('US', array) == -1 ){

    alert('Your country is not supported.');

} else {
     alert('Your country is supported.');   
}

这不起作用,因为它只查看索引,而不是我认为的值。如果数组中存在值,那么查找和返回的最简洁,最快捷的方法是什么?

2 个答案:

答案 0 :(得分:5)

要查找匹配项,您可以使用jQuery.grep()

var res = $.grep(arr, function(item) {
    return item.short_name == 'US';
});

它返回一个数组,如果找不到匹配项,它将为空。

或者,您可以使用Array.prototype.filter()

var res = arr.filter(function(item) {
    return item.short_name == 'US';
});

加成

您可以进一步概括:

function searchFunction(field)
{
    return function(arr, term) {
        return arr.filter(function(item) {
            return item[field] == term;
        };
    };
}

var searchByShortName = searchFunction('short_name');

if (searchByShortName(arr, 'US').length) {
    // ..
}

答案 1 :(得分:1)

你需要的是这样的东西

var countries = [{'long_name': 'United States', 'short_name': 'US'},
{ 'long_name': 'California', 'short_name': 'CA'}]; //now this is an array with objects

function hasCountry(shortName){
    for(var i = 0, len = countries.length; i < len; i++){
        if(countries[i]['short_name'] === shortName) return true;
    }
    return false;
}

if(hasCountry('US')){
   // not supported..
} else {
   // not supported
}

但是,更好的解决方案是将国家/地区标准化为此类对象。

var countries = {'US': 'United States', 'CA': 'California'}; // this is an object

if(countries['US'] != null){
    // supported
} else {
  // not supported
}