【问题标题】:How to shorten the following if statement in javascript如何在javascript中缩短以下if语句
【发布时间】:2014-11-20 15:10:11
【问题描述】:

我是 javascript 新手,刚刚写了以下内容,但是我使用的工具说执行时间太长。我检查了一些较旧的帖子,发现了类似的问题,但条件并不完全相同。有什么办法可以缩短这段代码,让计算机不会认为它需要太多时间来执行?也许只需缩短代码就可以解决问题。

if ((test.something("WhereTo").indexOf("LCUB")!= -1) || (test.something("WhereTo").indexOf("LMDV")!= -1) || (test.something("WhereTo").indexOf("LMUS")!= -1) || (test.something("WhereTo").indexOf("LDOM")!= -1) || (test.something("WhereTo").indexOf("LMEX")!= -1) || (test.something("WhereTo").indexOf("LMDV")!= -1) || (test.something("WhereTo").indexOf("LBRB")!= -1) || (test.something("WhereTo").indexOf("LKEN")!= -1) || (test.something("WhereTo").indexOf("LTHA")!= -1) || (test.something("WhereTo").indexOf("LJAM")!= -1) || (test.something("WhereTo").indexOf("LABW")!= -1))
{
return true;
}
else
{return false;}

【问题讨论】:

  • 这可能取决于test.something("WhereTo") 的作用。如果这是一个复杂的操作,可能值得执行一次,将返回值存储在一个变量中,然后对变量执行所有indexOf 操作。
  • 我已投票为重复,但请特别查看此答案以获得可能会喜欢你的东西:stackoverflow.com/a/11820643/1470607
  • 将字符串 args 放入数组中的indexOf。使用下划线或 lodash 之类的东西来查看这些元素是否满足条件。大约 1-4 行取决于样式,并且更易于维护。或者使用正则表达式,因为您只是在寻找包含。
  • @albanx ... 差别不大。

标签: javascript if-statement conditional-statements


【解决方案1】:

怎么样;

var haystack = ["LCUB", "LMDV", "LMUS", .....];
var needle = test.something("WhereTo");

var result = needleInHaystack(needle, haystack);

function needleInHaystack(needle, haystack) {
    for (var i = 0; i < haystack.length; i++)
        if (needle.indexOf(haystack[i]) != -1)
            return true;

    return false;    
}

var haystack = ["LCUB", "LMDV", "LMUS"];

var result = needleInHaystack("xxx LMDV xxx", haystack);
document.write(result);

var result = needleInHaystack("xxx ZZZZ xxx", haystack);
document.write("<br>" + result);


function needleInHaystack(needle, haystack) {
    for (var i = 0; i < haystack.length; i++)
        if (needle.indexOf(haystack[i]) != -1)
            return true;

    return false;    
}

【讨论】:

  • 感谢您的帮助。当不存在 ["LCUB", "LMDV", "LMUS", .....] 时,这不会返回 false 吗?我添加了 else return false 最后它实际上破坏了代码
  • 已更新。你不会使用 else,你会在循环结束时返回 false。
  • 我的错。我没有返回结果。谢谢这对我来说非常有用。您能否解释一下您是如何提出 for 循环解决方案的以及它为何有效?
  • 您将搜索的所有字符串放在一个数组中,然后循环遍历该数组的每个元素,查看其文本是否存在于测试字符串中,如果是则该函数立即返回 true (从而打破循环并退出)。如果循环到达函数的末尾,则意味着之前没有返回 true,因此必须没有匹配项,而是返回 false
【解决方案2】:

如果test.something("WhereTo")返回一个字符串,你可以执行以下操作

var yourString = test.something("WhereTo");
if(yourString.search(/LCUB|LMDV|LMUS|.../) != -1) return true;
return false;

【讨论】:

    【解决方案3】:
    var foo = test.something('WhereTo');
    var bar = ['LCUB', 'LMDV', 'LMUS'];
    return bar.some(function(x){
        return foo.indexOf(x) !== -1;
    });
    

    【讨论】:

      猜你喜欢
      • 2018-08-19
      • 1970-01-01
      • 2012-04-06
      • 2012-07-05
      • 1970-01-01
      • 2012-04-25
      • 2022-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多