2016-10-04 4 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に別の||の状態で入ることができます。

関連する問題