2012-04-30 12 views
2

の配列で一致するかどうかを確認しようとしています。PURE 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 
    } 
} 

:私は正確な値をチェックする必要はありません。 match()関数をシミュレートしたいので、img = "http://a.b.c/d/"で、配列内で "b.c /"の場合function()を実行します。

答えて

1

あなたの「サイト」変数が正規表現ではなく、配列のようになります。後で

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

:あなたは、アレイ内の「サイト」を維持することを好む何らかの理由場合

if (img.match(sites)) 
    ...... 

var sites = ["site1.com", "site2.com", "site3.com"] 
var sitesRegexp = new RegExp("\\b(" + sites.join("|").replace(".", "\\.") + ")\\b") 

.... 

if (img.match(sitesRegexp) 
    ...... 
+0

おかげで、これは働いた:D – Luis

+0

は**特殊な正規表現文字をエスケープすることを忘れないでください*! *ドットだけが特殊文字ではありません。 .replace(/ [[^ $。| * *((){} \\]/g、 '\\ $ &');' –

1

フィルタの良いユースケースです。

あなたはそれが「古い」ブラウザ上で作業したい場合:

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

何も見つからなかった場合には、結果(複数可)を含む配列を返し、そうでない場合は、空の配列を返します

> [1,2,3,4].filter(function(item) { return item == 4 }); 
[ 4 ] 

出典:Underscore.js

だから今、あなたのコードは次のようになります。

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 

} 
0

あなたは、配列プロトタイプを拡張することができますので、それをサポートすることができます

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

用法:すべてのブラウザ...

はこれを試してRTSあなたはヨーヨーの正規表現に変換する際var t=myArr.myContains(3);

+0

更新時の注記を参照してください – Luis

+0

@Luis try now ...... –

関連する問題