2014-04-03 153 views
0

我想要捕獲一個值是否包含在字符串中。我有一個有限的值列表,用於匹配逗號分隔的可變長度字符串,長度可以是400個字符。任何出現的字符串只會出現一次,不會有任何重複,字符串中也不會有兩個靜態列表項的實例,例如,該字符串永遠不會同時包含「差」和「極限」。在字符串中查找數組值

項目的靜態列表

差一般好更好最好終極

要搜索的字符串對

Cake,Good,Pickles,System,Tires 

我知道我可以使用的indexOf和一堆IF語句,但我想知道是否有更好的做法,比如將我的靜態列表分配給一個數組

var myList=new Array [「Poor」, 「Fair」, 「Good」, 「Better」, 「Best」, 「Ultimate」]; 

我不知道如何通過數組和字符串迴路返回值發現,例如,在這個例子中「」。這樣做的最好方法是什麼 - 最好的定義是最高效,最快和最容易維護(假設這些並不矛盾)?

謝謝

回答

2

是的,你在我看來是正確的。看:

var myList= ["Poor", "Fair", "Good", "Better", "Best", "Ultimate"]; 
var stringList = "Cake,Good,Pickles,System,Tires"; 

for (var i = 0; i < myList.length; i++) 
{ 
    if (stringList.indexOf(myList[i]) > -1) 
    { 
     window.alert("Contains: " + myList[i]); 
     break; 
    } 
} 

Demo

如果您確信這些值將匹配,並且您不需要對列表中的該字符串進行任何驗證,那麼該簡單循環 - in vanilla js - 就可以工作。快速,高效和易於維護。

1

根據您的需求,您可以使用數組功能的forEach或每隔:

var myList=['Poor', 'Fair', 'Good', 'Better', 'Best', 'Ultimate']; 
var myString = "Cake,Good,Pickles,System,Tires"; 
var valContainedInString = []; 

myList.forEach(isInString); 


function isInString(pVal, pIndex, pArray) { 
    if(myString.indexOf(pVal) >= 0) { 
     valContainedInString.push(pVal); 
    } 
} 


for(var i = 0; i < valContainedInString.length; i++) { 
    console.println(valContainedInString[i]); 
} 

這將輸出:「好」。

更多信息:foreachevery