2012-05-01 149 views
2

我已經建立了一個搜索功能用於沿的線的javascript對象的數組:Javascript邏輯搜索?

  1. 用戶類型文本形式輸入框
  2. 遍歷對象陣列
  3. 如果對象文本包含輸入的文本,推對象到一個單獨的「過濾」陣列
  4. 顯示過濾陣列

此使用字符串search()函數內置的JavaScript工作正常即。

if(objectarray[i].text.search(userstring)>=0){ 
    filteredarray.push(currentobject) 
}; 

現在客戶想辦的線沿線的一個更先進的搜索:其中文本包含

找對象(X1或X2)和(X3或X4或X5)

在哪裏每個X中的是一個字,並且當上述條件滿足的對象將被壓入過濾收集。

有一個內置的功能,它可以處理這種複雜的布爾語句?

+0

數值響應考慮這個庫,聲稱使用了重新分析做這樣的事情你描述:https://github.com/bloomtime/布爾表達式-JS – Soferio

回答

2

使用答案this question

我藉此:

var usersearchstring = "(x1 or x2) and (x3 or x4 or x5)"; 

並使用該轉換它:

usersearchstring = usersearchstring.replace(/[-\w]+/g, "targetstring.toLowerCase().search('$&')>=0"); 

進入這個:

(targetstring.toLowerCase().search('x1')>=0 or targetstring.toLowerCase().search('x2')>=0) and (targetstring.toLowerCase().search('x3')>=0 or targetstring.toLowerCase().search('x4')>=0 or targetstring.toLowerCase().search('x5')>=0) 

注: 「> = 0」需要轉換通過搜索功能將返回一個布爾值

+0

我喜歡自我解決問題... :) – bPratik