2011-07-12 35 views
2

我有这个JQuery/Javascript的代码块来筛选我的名单的搜索条件。这很长,看起来有点不专业。有什么办法可以简化它吗?寻找一种方法来简化含有多个||的if语句

喜欢什么“.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>'; 
      } 

     } 
     ); 
+1

如果这是您需要的逻辑,那么它是*简化*。可读性也有一些需要说明的地方。 –

+1

codereview.stackexchange.com – bevacqua

+1

我认为http://codereview.stackexchange.com/是正确的网站要问 – Sotiris

回答

4

直截了当地“简化”的代码将

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)) { 
    ... 
+0

太好了。非常感谢您的帮助。 – JFFF

1

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

这个想法是,你试图在if语句上推论一些东西,它不是'indexOf'这是一个商业规则,试着给这个规则一个名字,并把代码放在表达意图的方法中。

只是我的0.02

+0

感谢您的帮助。 – JFFF

1

我会做的第一件事是请注意下面的代码片段:

(filterValue == '' || filterValue == null) 

可改为

!filterValue 

这是因为空或空字符串变量在JavaScript中被认为是'falsy',即当被视为布尔值时,这些值将转换为false。

然后,我会像Alexander Gessler [1]所做的那样,将filterValue.toUpperCase()重复一遍。

[1] Looking for a way to simplify an if statement with multiple ||

+0

太棒了!谢谢 ! – JFFF

相关问题