我有这个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>';
}
}
);
答案 0 :(得分: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)) {
...
答案 1 :(得分:1)
我建议你阅读以下重构模式:
这个想法是你试图在if语句上推断一些内容,并且它不是'indexOf'这是一个业务规则,试着给该规则命名并将代码放在表达意图的方法中。
只是我的0.02
答案 2 :(得分:1)
我要做的第一件事就是注意以下代码片段:
(filterValue == '' || filterValue == null)
可以更改为
!filterValue
这是因为在javascript中将null或空字符串变量视为'falsy',即当被视为布尔值时,这些值将转换为false。
然后我会像亚历山大·盖斯勒[1]那样做,并将过滤掉的filterValue.toUpperCase()分解出来。
[1] Looking for a way to simplify an if statement with multiple ||