【问题标题】:simplify javascript if statement where conditions are identical except for variable简化 javascript if 语句,其中条件相同,但变量除外
【发布时间】:2013-02-26 16:30:54
【问题描述】:

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

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

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

【问题讨论】:

  • 绝对,用纯js代替jquery,减少40-70kb :)
  • @Ark 是否 OP 有其他 jQuery 依赖项并不重要,如果他发布 jQuery 代码很可能就是这种情况。
  • 我无法理解答案在这个网站上的速度有多快。 :)
  • @FabrícioMatté 你在假设我的假设,这是一个开始:)

标签: javascript if-statement simplify


【解决方案1】:

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

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

}

进一步的注意事项可能是通过使用标识符来减少 DOM 的遍历,并且只查找不同的元素(如果这适合您的需要)而不是所有可能具有类 taxclass 的元素。

【讨论】:

  • 同意您的说明。但在这种情况下,我没有那么奢侈。即便如此,你还是回答了我的问题,然后回答了一些问题。
【解决方案2】:
var txt = $('.taxclass').text();
if (txt.indexOf(tax1)>-1 || txt.indexOf(tax2)>-1) {}

【讨论】:

  • 这并没有真正简化,它只是更具可读性。过程是一样的。
【解决方案3】:

一种超级快捷的方法是不要复制 $('.taxclass').text()

尝试类似的东西

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

【讨论】:

    【解决方案4】:

    您可以将$('.taxclass').text() 存储在变量中,或使用正则表达式。

    var str = $('.taxclass').text();
    
    if (str.indexOf(tax1) > -1 || str.indexOf(tax2) > -1)
    
    // Or with regex
    if(/(text1)|(text2)/.test($('.taxclass').text())
    {}
    

    【讨论】:

    • 我不相信正则表达式能以任何人的标准简化这一点。
    • @GrantThomas,如果你有更多的字符串要测试的话。你可以从数组中构建你的正则表达式。
    • @AshBurlaczenko,说得好。如果这更复杂,那似乎很诱人。但效率会降低吗?
    【解决方案5】:

    又快又脏:

    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)
    

    【讨论】:

    • 没有。 taxes 不是数组,它们是子字符串。
    • 有趣的方法。虽然,我希望你把你的原件留在原处。这让Bergi 的评论看起来错位了。
    【解决方案6】:

    怎么样:

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

    【讨论】:

    • 这简化了?什么,当你突然意识到你需要在一两周内知道时,f 是什么?
    • 我不认为它比发布的替代品更简单,但提问者可能会。
    猜你喜欢
    • 2014-11-10
    • 2012-06-10
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多