根据正则表达式匹配选择阵列中的对象

Cho*_*hoy 10 javascript arrays

如何使用javascript仅返回符合特定条件的数组中的对象?

例如,如果我有['apple','avocado','banana','cherry']并且只想输出以字母'A'开头的水果.

编辑:

接下来Sean Kinsey的功能,并尝试通过传入数组和字母来使其更灵活:

function filterABC(arr,abc){

var arr = arr;

var filtered = (function(){
    var filtered = [], i = arr.length;
while (i--) {
    if ('/^' + abc + '/'.test(arr[i])) {
    filtered.push(arr[i]);
    }
}
return filtered;
})();

return filtered.join(); 
Run Code Online (Sandbox Code Playgroud)

}

试图用filterABC(arr,'A')或filterABC(arr,'A | B | C |')调用它来输出从A到C的所有匹配但是这部分有问题.

Sea*_*sey 14

如果定位ES3(最常见且安全使用的javascript版本),请使用

var arr  = ['apple','avocado','banana','cherry'];

var filtered = (function(){
    var filtered = [], i = arr.length;
    while (i--) {
        if (/^A/.test(arr[i])) {
            filtered.push(arr[i]);
        }
    }
    return filtered;
})();
alert(filtered.join());
Run Code Online (Sandbox Code Playgroud)

但如果你的目标是ES5,那么你可以使用它

var filtered = arr.filter(function(item){
    return /^A/.test(item);
});
alert(filtered.join());
Run Code Online (Sandbox Code Playgroud)

如果您愿意,可以使用ES3在ES3中包含ES5过滤方法

if (!Array.prototype.filter) {
    Array.prototype.filter = function(fun /*, thisp*/){
        var len = this.length >>> 0;
        if (typeof fun != "function") 
            throw new TypeError();

        var res = [];
        var thisp = arguments[1];
        for (var i = 0; i < len; i++) {
            if (i in this) {
                var val = this[i]; // in case fun mutates this
                if (fun.call(thisp, val, i, this)) 
                    res.push(val);
            }
        }

        return res;
    };
}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/Array/filter#Compatibility.

更新 回答更新的问题

var filtered = (function(pattern){
    var filtered = [], i = arr.length, re = new RegExp('^' + pattern);
    while (i--) {
        if (re.test(arr[i])) {
            filtered.push(arr[i]);
        }
    }
    return filtered;
})('A'); // A is the pattern

alert(filtered.join());
Run Code Online (Sandbox Code Playgroud)