2012-04-30 90 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)) 
    ...... 

如果由於某種原因,你寧願保持「地王」在一個陣列,你也可以創建一個正則表達式「on the fly」:

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

如果沒有找到它會返回一個空數組,否則,返回包含結果(S)

> [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原型,所以它支持RTS所有的瀏覽器...

試試這個:

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

+0

請參閱更新中的說明 – Luis

+0

@Luis現在試試...... –