2011-09-19 63 views
0

假设数组你有一个数组:使用JavaScript或者jQuery来创建一个数组

var arrStateCityAll=['CA_Alameda','CA__Pasadena','CA_Sacramento','NY_Albany','NY_Buffalo','NY_Ithaca'] 

是否有使用JavaScript和/或jQuery的过滤arrStateCityAll的容易的方式来获得一个新的数组( arrStateCityAll的一个子集);像这样:

// return's ['CA_Alameda','CA__Pasadena','CA_Sacramento'] 

var arrStateCityCA=FilterArray('CA',arrStateCityAll); 

回答

2

你可以使用jQuery.grep

var arrStateCityCA = 
    $.grep(arrStateCityAll,function(el,i){return (el.substring(0,2)=='CA')}); 

Demo at jsfiddle

要实现你的实际FilterArray功能,如图在您的文章,你可以做

function FilterArray(state,arr){ 
    return $.grep(arr, 
        function(el,i) {return (el.substring(0,2)==state)} 
    ); 
} 

这使得几屁股umptions。

  1. 状态总是2个字符。

  2. 州始终是前2个字符。

当然记得区分大小写和(这个功能区分大小写),即'CA'不等于'Ca'

+0

哎呦 - 我的'substring'参数错了! –

2

这应该工作。

var arrStateCityCA = []; 
for (var i = 0;i<arrStateCityAll.length;i++){ 
    if (arrStateCityAll[i].substr(0,2) == 'CA'){ 
     arrStateCityCA.push(arrStateCityAll[i]); 
    } 
} 
3

您可以使用JavaScript的Array.filter

var arrStateCityAll = ['CA_Alameda','CA__Pasadena','CA_Sacramento','NY_Albany','NY_Buffalo','NY_Ithaca'] 

var arrStateCityCA = arrStateCityAll.filter(function (element) { 
    return element.indexOf("CA_") == 0; 
}); 

与上面链接的mozilla文档为不隐式支持过滤器的浏览器提供了一个解决方案。

+0

谢谢,这工作正常。 – user815460

+0

那么,它在Firefox中正常工作,但不幸的是,不在IE中。叹息... – user815460

+0

该页面有一个解决方案:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter#Compatibility – Dennis

1

,如果你将有你的国家和城市名之间的undescore,您可以在下划线和测试针对第一阵列值

function getSubSetByState(set,state) { 

    var result = []; 
    for(var i=0,l=set.length;i<l;++i) { 
     if(set[i].split('_')[0] === state) { 
      result.push(set[i]); 
     } 
    } 

    return result; 
} 

采用分体式如果给它设定的地方,和那么你正在寻找的状态。

相关问题