【问题标题】:Is there a way in javascript to avoid repeating the same variable in a logic expression? [duplicate]javascript中有没有办法避免在逻辑表达式中重复相同的变量? [复制]
【发布时间】:2019-06-12 10:11:17
【问题描述】:

例如,代替:

if (ext === "_st" || ext ==="_mt" || ext === "_00" ){
   //do something
}

我直观地期望以下内容也有效:

if (ext === ("_st" || "_mt" || "_00" )){
    //do something
}

但这不起作用。 有没有办法避免重复相同的(在这种情况下为“ext”)变量以获得更压缩和更高效的代码?

更新:我在提问前进行了搜索,前 10-15 条建议中没有出现任何“重复”问题。相反,StackOverflow 对不相关的 -false 重复项提出了错误的建议。

这是我的建议: 与其将问题标记为“重复”,为什么不将它们与答案合并到一个带有直观标题的问题中?

感谢您的回答。

更新 #2: 这不是重复的。建议的问题的答案仅涉及 OR 优化,而我的问题更笼统,它指的是“逻辑表达式”,而不是专门针对 OR。我刚刚提供了一个 OR 示例。我特意问的是有没有一种方法可以避免在逻辑语句中重复主变量,无论是OR、AND等。

例如:给定var1 == var2 == var3

if (ext === var1 && ext === var2 && ext === var3 ){
   //do something
}

【问题讨论】:

  • 使用数组:[ "_st", "_mt", "_0" ].includes( ext ).
  • @dllb 也一样,您如何期望 ext === "_st" && ext ==="_mt" && ext === "_00" 返回除 false 之外的任何内容?
  • 如果您想要&& 条件的等效项,您可以使用Array#every 而不是includes...没有通用答案,只有针对特定情况的特定答案。
  • 并且发布副本本身也不错。其他问答已经包含答案,所以你的问题就这样解决了。无需为此抱怨。如果您之前没有发现……好吧,那会发生,没什么大不了的。
  • 如果您想要同时拥有“ands”和“ors”(而不是仅仅查看数组是否包含某些内容),那么您正在编写一系列比较。我看不出如何在不指定比较双方的情况下编写比较。此外,如果您的问题不是重复的,因为在您的“真实”场景中,它并非都是“或”,为什么不只是消除混淆并在您的问题中设置一些条件“和”。这比把它们都变成“或”然后添加一段来解释这不是你真正的意思要清楚得多。

标签: javascript if-statement logical-operators


【解决方案1】:

var ext = "_00";
if (/^_st$|^_mt$|^_00$/.test(ext) ){
    console.log("do something");
   //do something
}

使用正则表达式这是可能的。

说明: 每个比较都由 |(or) 分隔并包含在 ^ 和 $ 中以完全匹配,否则它将匹配 else where。

【讨论】:

  • 反对者解释原因
  • 是的,这是否意味着它应该被否决?
  • 也许他们应该对这个问题投反对票,我正在回答问题,所以在回答之前我无法进行搜索。
  • 也许他们应该这样做。
【解决方案2】:

let ext = "_mt";

if( ext.match( /_st|_mt|_00/g ) ) {
  console.log("Yes : type 1");
}


if( ["_st", "_mt", "_00"].includes( ext ) ) {
  console.log("Yes : type 2");
}

正如@Shily 所说,您也可以使用数组和这种正则表达式

【讨论】:

    猜你喜欢
    • 2019-01-13
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 2020-12-02
    • 2022-11-16
    • 1970-01-01
    • 2020-11-20
    相关资源
    最近更新 更多