简化条件相同(变量除外)的javascript if语句

简化条件相同(变量除外)的javascript if语句,javascript,if-statement,simplify,Javascript,If Statement,Simplify,如果这是一个重复的问题,我道歉。这是一个用例问题,似乎每个人都有自己的版本 我想知道这是否可以简化: if ($('.taxclass').text().indexOf(tax1)>-1 || $('.taxclass').text().indexOf(tax2)>-1) {} 您可以将$('.taxclass').text()存储在变量中,或使用正则表达式 var str = $('.taxclass').text(); if (str.indexOf(tax1) > -

如果这是一个重复的问题,我道歉。这是一个用例问题,似乎每个人都有自己的版本

我想知道这是否可以简化:

if ($('.taxclass').text().indexOf(tax1)>-1 || $('.taxclass').text().indexOf(tax2)>-1) {}
您可以将
$('.taxclass').text()存储在变量中,或使用正则表达式

var str = $('.taxclass').text();

if (str.indexOf(tax1) > -1 || str.indexOf(tax2) > -1)

// Or with regex
if(/(text1)|(text2)/.test($('.taxclass').text())
{}

它非常简单,但您可以通过只获取元素文本一次并重用变量来减少冗余:

var text = $('.taxclass').text();
if (text.indexOf(tax1)>-1 || text.indexOf(tax2)>-1) {

}

另一个注意事项是通过使用标识符并只查找一个不同的元素(如果适合您的需要)来减少对DOM的遍历,而不是使用类
taxclass
的所有可能的东西。一个超级快速的方法是不复制$('.taxclass').text()

var txt = $('.taxclass').text();
if (txt.indexOf(tax1)>-1 || txt.indexOf(tax2)>-1) {}
试试像这样的东西

var tax = $('.taxclass').text();
if (tax.indexOf(tax1)>-1 || tax.indexOf(tax2)>-1) {}
那么:

f = function (x) { return $('.taxclass').text().indexOf(x) > -1; }
if (f(tax1) || f(tax2)) {}
又快又脏:

text.indexOf(tax1+"~"+tax2)>-1
函数式,适用于n个字符串,但冗长:

[tax1, tax2].some(function(s) { return s.indexOf(text)>-1 })
作为原型:

String.prototype.foundIn = function() {
    var s=this; return Array.prototype.slice.call(arguments).some(function(m)
       {return m.indexOf(s)>-1});
};
用法:

$('.taxclass').text().foundIn(tax1, tax2)

绝对地,使用纯js而不是jquery,这是一个40-70kb的缩减:)@Ark实际上并不在乎OP是否有其他jquery依赖项,这很可能是他发布jquery代码的情况。我无法理解这个网站上的答案有多快@法布里西奥马特你在做我的假设的假设,这是一个开端:)我拒绝相信,按照任何人的标准,正则表达式简化了这一点。@GrantThomas,如果你有更多的字符串要测试的话。您可以从和数组构建正则表达式。@AshBurlaczenko,说得对。如果这更为复杂,那似乎很诱人。但是它的效率低吗?这简化了吗?什么,当你在一两周内意识到你需要知道的是
f
?我不认为这比公布的备选方案简单,但询问者可能会。这不是真正的简化,只是更具可读性。过程是一样的<代码>税务
es不是数组,它们是子字符串。有趣的方法。尽管如此,我还是希望你把你的原稿留在原处。这使得Bergi的评论看起来有点错位。同意你的意见。但在这种情况下,我没有那种奢侈。尽管如此,你还是回答了我的问题,然后回答了一些。