Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于正则表达式匹配选择数组中的对象_Javascript_Arrays - Fatal编程技术网

Javascript 基于正则表达式匹配选择数组中的对象

Javascript 基于正则表达式匹配选择数组中的对象,javascript,arrays,Javascript,Arrays,如何使用javascript仅返回数组中满足特定条件的对象 例如,如果我有['apple'、'avocado'、'banana'、'cherry'],并且只想输出以字母'A'开头的水果 编辑: 采用下面Sean Kinsey的函数,并通过传递数组和字母进行匹配,使其更灵活: 功能过滤器C(arr、abc){ } 试图用filterABC(arr,'A')或filterABC(arr,'A | B | C |')调用它以输出从A到C的所有匹配项,但这部分有问题。如果目标是ES3(最常见且使用安全的

如何使用javascript仅返回数组中满足特定条件的对象

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

编辑:

采用下面Sean Kinsey的函数,并通过传递数组和字母进行匹配,使其更灵活:

功能过滤器C(arr、abc){

}

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

如果目标是ES3(最常见且使用安全的javascript版本),则使用

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

var filtered = arr.filter(function(item){
    return /^A/.test(item);
});
alert(filtered.join());
如果需要,可以通过使用在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;
    };
}

您的问题在于动态生成正则表达式。不能通过连接字符串来生成有效的正则表达式。必须使用构造函数:RegExp()从字符串生成正则表达式

下面是我匹配数组的函数:

   function matcharray(regexp, array) {
        var filtered = [];
        for (i = 0; i < array.length; i++) {
            if (regexp.test(array[i])) {
                filtered.push(array[i]);
            }
        }
        return filtered;
    }

你真的是指数组中的对象,还是指数组中的字符串?我更新的答案解决了你的问题吗?谢谢!代码工作得很好,我只是想把它变成一个函数,在这里我可以传递数组和字母,从而使它更灵活一些。我可以很好地传入数组,但是我在将字母param传入regext部分时遇到了一些问题(请参见我上面的编辑)。在构建类似这样的RegExp时,需要使用RegExp类:`RegExp('^'+abc)。test(…`7年后,答案的第一行让我发笑:-)
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;
    };
}
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());
   function matcharray(regexp, array) {
        var filtered = [];
        for (i = 0; i < array.length; i++) {
            if (regexp.test(array[i])) {
                filtered.push(array[i]);
            }
        }
        return filtered;
    }
var myregex = "abc";
alert(matcharray(new RegExp(myregex), my_array).join());