Ищете способ упростить оператор if с несколькими || - PullRequest
2 голосов
/ 12 июля 2011

У меня есть этот блок кода 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>';
          }

      }
        );

Ответы [ 3 ]

4 голосов
/ 12 июля 2011

Простой способ «упростить» код был бы

  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))   {
   ...
1 голос
/ 12 июля 2011

Первое, что я хотел бы сделать, это заметить следующий фрагмент кода:

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

можно изменить на

!filterValue

Это потому, что пустая или пустая строковая переменная считается ложной в javascript, т. Е. Когда она рассматривается как логическое значение, эти значения преобразуются в ложные.

Тогда я бы сделал, как сделал Александр Гесслер [1], и исключил бы filterValue.toUpperCase (), который повторяется.

[1] Ищите способ упростить оператор if с несколькими ||

1 голос
/ 12 июля 2011

Предлагаю прочитать следующие шаблоны рефакторинга:

Идея состоит в том, что вы пытаетесь сделать вывод о том, что оператор if, и это не 'indexOf', это бизнес-правило, попытайтесь дать этому правилу имя и поместить код в метод, выражающий намерение.

только мои 0,02

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...