2015-11-14 75 views
2

我的目標是創建一個過濾器search函數,特別是實際上我使用的是.indexOf方法,它允許我檢查兩個字符串是否相等。問題是,如果我有像這樣的空格符的比較字符串:Hair Cut創建字符串過濾器比較的最佳方法?

例子:
要搜索的字符串:包含在對象Hair
字符串:Hair Cut

var cerca = $('#filter_service').val(); 
for(var i = 0; i < GlobalVariables.availableServices.length; i++) { 
    if (cerca.toLowerCase().contains(GlobalVariables.availableServices[i].name.toLowerCase()) != -1) { 
     console.log(GlobalVariables.availableServices[i].name) 
    } 
} 

怎麼可以看到我在穩定物價變量cerca包含在示例中的字符串Hair。我將它與一個對象變量進行比較,我如何說,問題是如果我插入字符串Hair我在控制檯中沒有得到任何響應,如果我插入帶有間隔空間的字符串,如比較字符串Hair Cut我得到控制檯響應。

當變量cerca等於比較字符串的第一個字符時,我怎樣才能打印出結果?特別是Hai

我不知道我是否清楚,希望是的。

回答

3

.contains()用於檢查DOM元素的子元素。您上面說過,您正在使用.indexOf進行檢查,但它看起來不像您在代碼中使用它?

var cerca = $('#filter_service').val(); 
var searchIn; 

for(var i = 0; i < GlobalVariables.availableServices.length; i++) { 
    searchIn = GlobalVariables.availableServices[i].name.toLowerCase().split(' '); 
    for (j = 0; j < searchIn.length; j++) { 
     if (cerca.toLowerCase().split(' ').indexOf(searchIn[j].toLowerCase()) >= 0) { 
      console.log(GlobalVariables.availableServices[i].name); 
     } 
    } 
} 

$('#filter_service').on('input', function() { 
    var inputStr = $('#filter_service').val(); 
    var similar = []; 
    for (i = 0; i < GlobalVariables.availableServices.length; i++) { 
     if (GlobalVariables.availableServices[i].name.toLowerCase().indexOf(inputStr.toLowerCase) >= 0) { 
      similar[similar.length] = GlobalVariables.availableServices[i].name; 
     } 
    } 
    // At this point, you can do whatever you want with the similar service 
    // names (all of the possible result names are included in the array, similar[].) 
}); 

我現在無法測試該代碼,但理論上它應該可以工作。

這裏是一個的jsfiddle演示: http://jsfiddle.net/MrGarretto/vrp5pghr/

編輯:更新和固定我的錯誤

編輯2:增加了 '可能的結果' 的解決方案

編輯3:添加了的jsfiddle

+1

是的,抱歉,我粘貼了我真正嘗試的解決方案。 – Dillinger

+0

也是你的代碼給這個錯誤:Uncaught TypeError:cerca.toLowerCase(...)。split(...)。includes不是函數 – Dillinger

+0

哎呀!剛剛更新了我的答案;它現在應該沒有錯誤地工作 – MrGarretto