使用Javascript或jQuery从数组创建数组

时间:2011-09-19 13:54:49

标签: javascript jquery

假设你有一个数组:

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

是否有 easy 方式使用javascript和/或jQuery过滤arrStateCityAll以获取新数组(arrStateCityAll的子集);像这样的东西:

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

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

5 个答案:

答案 0 :(得分:5)

可能你想对每个项目做一个正则表达式。您可以使用jQuery的grep函数执行此操作。

http://api.jquery.com/jQuery.grep/

答案 1 :(得分: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文档为没有隐式支持过滤器的浏览器提供了解决方案。

答案 2 :(得分: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)}
    );
}

这做了一些假设。

  1. 状态总是2个字符。

  2. 状态永远是前2个字符。

  3. 当然还记得区分大小写(此函数 区分大小写),即'CA'不等于'Ca'

答案 3 :(得分:2)

这应该有用。

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

答案 4 :(得分:1)

如果您要在州名和城市名称之间使用非核心,则可以拆分下划线并针对第一个数组值进行测试

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;
}

使用if给它一组位置,然后是你要搜索的状态。