Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正在寻找一种方法来简化具有多个||_Javascript_Jquery_Mobile_Filter - Fatal编程技术网

Javascript 正在寻找一种方法来简化具有多个||

Javascript 正在寻找一种方法来简化具有多个||,javascript,jquery,mobile,filter,Javascript,Jquery,Mobile,Filter,我有这个JQuery/Javascript代码块来按搜索词过滤我的列表。它很长,看起来有点不专业。有什么方法可以简化它吗 比如“.contains()” 如果有人能给我指出正确的方向,我将不胜感激。谢谢 这是代码;如果您需要更多,请询问我: $.each(catalog.products, function(index, value) { if ((filterValue == '' || filterValue == null)

我有这个JQuery/Javascript代码块来按搜索词过滤我的列表。它很长,看起来有点不专业。有什么方法可以简化它吗

比如“.contains()”

如果有人能给我指出正确的方向,我将不胜感激。谢谢

这是代码;如果您需要更多,请询问我:

 $.each(catalog.products,
      function(index, value) {

          if ((filterValue == '' || filterValue == null)
                  || value.name.toUpperCase().indexOf(filterValue.toUpperCase()) != -1
                  || value.brand.toUpperCase().indexOf(filterValue.toLocaleUpperCase()) != -1
                  || value.category.toUpperCase().indexOf(filterValue.toUpperCase()) != -1
                  || value.sport.toUpperCase().indexOf(filterValue.toUpperCase()) != -1)
          {
              items.push('<li id="' + index + '">' +
                      '<a data-identity="productId"  href="./details.page?productId=' + index + '" >' +
                      '<img class="ui-li-thumb" src="' + value.thumbnail + '"/>' +
                      '<p>' + value.brand + '</p>' +
                      '<h3>' + value.name + '</h3>' +
                      '<span class="ui-li-count">' + value.price + ' $</span></li>') +
              '</a>';
          }

      }
        );
$。每个(目录.产品,
函数(索引、值){
如果((filterValue=''| | filterValue==null)
||value.name.toUpperCase().indexOf(filterValue.toUpperCase())!=-1
||value.brand.toUpperCase().indexOf(filterValue.ToLocalUpperCase())!=-1
||value.category.toUpperCase().indexOf(filterValue.toUpperCase())!=-1
||value.sport.toUpperCase().indexOf(filterValue.toUpperCase())!=-1)
{
items.push(“
  • ”+ ''; } } );
  • 简化代码的简单方法是

      var filterUpper = !filterValue || filterValue.toUpperCase();
      var test = function(s) {return s.toUpperCase().indexOf(filterUpper) != -1};
    
      if (!filterValue || test(value.name) || test(value.brand) || test(value.category) || test(value.sport))   {
       ...
    

    我建议您阅读以下重构模式:

    我们的想法是,您试图在if语句上推断出一些东西,它不是一个“indexOf”,而是一个业务规则,尝试为该规则命名,并将代码放在一个表示意图的方法中


    就我的0.02而言,我要做的第一件事是注意以下代码片段:

    (filterValue == '' || filterValue == null)
    
    可以改为

    !filterValue
    
    这是因为在javascript中,null或空字符串变量被视为“falsy”,即当被视为布尔值时,这些值将转换为false

    然后我会像Alexander Gessler[1]所做的那样,计算出filterValue.toUpperCase(),它会重复


    [1]

    如果这是您需要的逻辑,那么它就简化了。为了便于阅读,这里也有一些东西需要说明。我认为这是询问Hanks的合适网站,我不知道这个地方。太好了。非常感谢您的帮助。