2016-10-04 40 views
0

我在Jquery中有以下過濾器,它在用戶在輸入字段中輸入值時過濾對象中的數據,但工作正常,但是我想添加另一個過濾器來檢查用戶輸入與對象內的任何賣家名稱匹配例如。對於我有(val.country.search(regex) != -1)的國家,但是我如何爲賣家名稱添加一個名稱,因爲它沒有密鑰名稱。按對象內部值篩選

對象:

{ 
    "28": { 
     "name": "Alex", 
     "country": "Spain", 
     "antiquity": "new client", 
     "amount": "2690.58 USD", 
     "sellers": { 
      "Bob": "2690.58 USD", 
      "Harold": "2690.58 USD" 
     } 
    }, 
     "29": { 
     "name": "Bill", 
     "country": "UK", 
     "antiquity": "new client", 
     "amount": "2690.58 USD", 
     "sellers": { 
      "Support": "2690.58 USD", 
      "admin": "2690.58 USD" 
     } 
    }, 
     "30": { 
     "name": "Jeff", 
     "country": "USA", 
     "antiquity": "new client", 
     "amount": "2690.58 USD", 
     "sellers": { 
      "tom": "2690.58 USD", 
      "harry": "2690.58 USD" 
     } 
    } 
} 

JQuery的:

var regex = new RegExp(searchField, "i"); 
    var searchField = $('#search').val(); 
    var regex = new RegExp(searchField, "i"); 
    var output; 
    var count = 1; 

$.each(response, function(key, val){ 
      if ((val.name.search(regex) != -1) || (val.country.search(regex) != -1) || (val.antiquity.search(regex) != -1)){ 
      .... 
      } 
     }); 

回答

2

嗯,你知道,關鍵是sellers - 因此基於關,你就可以拿到鑰匙(名稱) sellers並運行您的正則表達式檢查:

$.each(response, function(key, val){ 
     if ((val.name.search(regex) != -1) || (val.country.search(regex) != -1) || (val.antiquity.search(regex) != -1)){ 
     .... 
     } else if (Object.keys(val.sellers).some(function(seller) { return seller.search(regex) != -1 })) { 
      //sellers matches 
     } 
    }); 

Array.some將測試每個數組值,並返回true,如果它們中的任何一個匹配。所以Object.keys(val.sellers)會讓你在一個數組中的賣家名稱,然後對你的正則表達式進行測試。爲了便於閱讀,我將它放在else if中 - 它可以在原始if中與另一||條件相符。