Javascript 检查数组中的值

Javascript 检查数组中的值,javascript,arrays,for-loop,match,Javascript,Arrays,For Loop,Match,我正在尝试使用纯JAVASCRIPT检查数组中的匹配。我不知道怎么做,我会感谢你的帮助 var sites = new Array ("site1.com", "site2.com", "site3.com" ...); // Sites array contains 100 values var imgs = document.getElementsByTagName("img"); for (var i = 0; i < imgs.length; i++) {

我正在尝试使用纯JAVASCRIPT检查数组中的匹配。我不知道怎么做,我会感谢你的帮助

var sites = new Array ("site1.com", "site2.com", "site3.com" ...);
// Sites array contains 100 values

var imgs = document.getElementsByTagName("img");
    for (var i = 0; i < imgs.length; i++) {
        img = imgs[i].src;

        // I'm trying to check if is in array, 
        // and don't waste a lot of size in code

        if(img.match(sites)){
            notHere(imgs[i]);
        }

        // This is the working way.
        // Even if location is a.site1.com/b/, it will match 
        if (img.match("site1.com")) {
            heReload(imgs[i]);
        }
        // Repeat this piece of code 100 times
    }
}
var sites=新数组(“site1.com”、“site2.com”、“site3.com”…);
//站点数组包含100个值
var imgs=document.getElementsByTagName(“img”);
对于(变量i=0;i

注意:我不想检查精确值。我想模拟
match()
函数,因此如果img=”http://a.b.c/d/在数组中是“b.c/”,它执行
function()

过滤器的良好用例

如果您想让它在“旧”浏览器上工作:

var nativeFilter = Array.prototype.filter;
_.filter = _.select = function(obj, iterator, context) {
    var results = [];
    if (obj == null) return results;
    if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);
    each(obj, function(value, index, list) {
      if (iterator.call(context, value, index, list)) results[results.length] = value;
    });
    return results;
};
如果未找到任何内容,则返回空数组,否则返回包含结果的数组

资料来源:

现在,您的代码将如下所示:

var sites = new Array ("site1.com", "site2.com", "site3.com" ...);
// Sites array contains 100 values

var imgs = document.getElementsByTagName( "img" );
for ( var i = 0; i < imgs.length; i++ ) {
    var img = imgs[ i ].src;
    var result = sites._filter( function( site ) {
        return img.match( site )
    });

    // result is an array of matching sites

}
var sites=新数组(“site1.com”、“site2.com”、“site3.com”…);
//站点数组包含100个值
var imgs=document.getElementsByTagName(“img”);
对于(变量i=0;i
您的“站点”变量应该是正则表达式而不是数组:

 var sites = /\b(site1\.com|site2\.com|etc|etc)\b/
后来:

 if (img.match(sites))
    ......
如果出于某种原因,您希望在数组中保留“站点”,还可以“动态”创建正则表达式:


您可以扩展阵列原型,使其支持所有浏览器

试试这个:

Array.prototype.myContains = function(obj) {
    var i = this.length;
    while (i--) {if (this[i] .indexOf(obj)>-1)  return true; }
    return false;
}
用法:
var t=myArr.myContains(3)

不要忘记转义特殊的正则表达式字符!点不是唯一的特殊字符<代码>替换(/[^$.|?*+({}\\]/g,\\$&');
var sites = ["site1.com", "site2.com", "site3.com"]
var sitesRegexp = new RegExp("\\b(" + sites.join("|").replace(".", "\\.") + ")\\b")

 ....

 if (img.match(sitesRegexp)
    ......
Array.prototype.myContains = function(obj) {
    var i = this.length;
    while (i--) {if (this[i] .indexOf(obj)>-1)  return true; }
    return false;
}