2012-02-10 68 views
1

我需要檢查一個字符串是否在數組中,作爲數組中任何項的字符串的一部分。 可以說數組中的一個項目是「Hello World」,字符串是「ello」,我需要返回true。inArray&in字符串

+0

看看這個問題 http://stackoverflow.com/questions/3975871/optimize-search-through-large-js-string-array – Shaheer 2012-02-10 06:02:49

回答

2

是的,你可以做到這一切。或 -

if(String(array).indexOf('ello')!=-1){ 
    ello is in the array 
} 
+0

你是馬安兄弟! – boruchsiper 2012-02-10 09:35:04

+0

我不知道這種類型的語法可用。 gr8工作的人! – Shaheer 2012-02-11 20:54:45

0

你可以做這樣的事情:

function contains(arr, str) { 
    var i = 0, 
     len = arr.length; 

    for (; i < len; ++i) { 
     if (arr[i].indexOf(str) > -1) { 
      return true; 
     } 
    } 
    return false; 
} 

顯然,這是在幾個方面幼稚的,例如,它沒有考慮大小寫,也不會告訴你哪個或多少項目匹配,但你可以很容易地修改它來做到這一點。

+0

+1。爲什麼地球上有人投票呢?它與另一個被選爲_up_的答案(實際上)是相同的,只不過這個答案是首先發布的。 (我並不真的在''for'語句中初始化循環控制變量_before_的樣式,但這不是downvote的原因。) – nnnnnn 2012-02-10 06:20:48

1

只需遍歷數組並檢查每個字符串。

function isStringInArray(data, stringToFind) { 
    for (var i = 0; i < data.length; i++) { 
     if (data[i].indexOf(stringToFind) > -1) return true; 
    } 
    return false; 
} 
+0

如果用戶有超過1000個元素,該怎麼辦? – Shaheer 2012-02-10 06:03:28

+0

@Shaheer除了緩存數組的'length'之外,還有一個問題嗎? – alex 2012-02-10 06:05:00

+0

問題在於循環。它將循環遍歷數組的每個元素 – Shaheer 2012-02-10 06:07:00

1

如果你有一個現代的瀏覽器或想polyfillArray.prototype.some()(或者使用一個庫如Underscore)。

var contains = ['A', 'Hello World'].some(function(member) { 
    return ~member.indexOf('ello'); 
}); 

jsFiddle

您標記這個jQuery的,所以你也可以使用這個(將在你可能關心所有的瀏覽器)...

var contains = !!$.grep(['A', 'Hello World'], function(member) { 
    return ~member.indexOf('ello'); 
}).length; 

jsFiddle

+0

它會在ie6/7上運行嗎?他們有很大的市場份額。 – Shaheer 2012-02-10 06:04:41

+0

@Shaheer不,但我鏈接到一個polyfill。 – alex 2012-02-10 06:05:29

+0

這可能是一個很好的解決方案。 – Shaheer 2012-02-10 06:09:14