按对象中的内部值过滤

时间:2016-10-04 15:03:45

标签: jquery

我在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)){
           ....
          }
        });

1 个答案:

答案 0 :(得分: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条件放入原始||