Javascript 正在寻找一种方法来简化具有多个||
我有这个JQuery/Javascript代码块来按搜索词过滤我的列表。它很长,看起来有点不专业。有什么方法可以简化它吗 比如“.contains()” 如果有人能给我指出正确的方向,我将不胜感激。谢谢 这是代码;如果您需要更多,请询问我:Javascript 正在寻找一种方法来简化具有多个||,javascript,jquery,mobile,filter,Javascript,Jquery,Mobile,Filter,我有这个JQuery/Javascript代码块来按搜索词过滤我的列表。它很长,看起来有点不专业。有什么方法可以简化它吗 比如“.contains()” 如果有人能给我指出正确的方向,我将不胜感激。谢谢 这是代码;如果您需要更多,请询问我: $.each(catalog.products, function(index, value) { if ((filterValue == '' || filterValue == null)
$.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)) {
...
我建议您阅读以下重构模式:
就我的0.02而言,我要做的第一件事是注意以下代码片段:
(filterValue == '' || filterValue == null)
可以改为
!filterValue
这是因为在javascript中,null或空字符串变量被视为“falsy”,即当被视为布尔值时,这些值将转换为false
然后我会像Alexander Gessler[1]所做的那样,计算出filterValue.toUpperCase(),它会重复
[1] 如果这是您需要的逻辑,那么它就简化了。为了便于阅读,这里也有一些东西需要说明。我认为这是询问Hanks的合适网站,我不知道这个地方。太好了。非常感谢您的帮助。