【问题标题】:Conditional Operator not working as expected in javascript条件运算符在 javascript 中无法按预期工作
【发布时间】:2019-09-23 19:07:48
【问题描述】:

以下条件运算符未按预期工作 我已将条件包含在基于场景中。

如果没有 src 或 tar 匹配,应该是 rate=0

如果 src 存在于 arr 并且是 SGD 并且 src 存在于 arr 并且是 SGD(反之亦然),则比率为 0.4

如果 src 存在于 arr 并且是 "EUR" || "GBP" || "USD" 并且 tar 存在于 arr 并且是 "SGD",(反之亦然),则比率为 0.3

如果arr 中存在src,arr 中存在tar,则速率应为0.5

场景:

(src==="SGD" and tar==="AUD") or (src==="AUD" && tar==="SGD")  => rate="0.4"
src === "SGD") and (tar === "EUR" or "GBP" or "USD") => rate=0.3
(src==`arr` values  and tar==`arr` values)=> rate=0.5 
(src no match arr && tar no match arr)=> rate=0
var arr =["AED","BGN","CAD","CHF","CZK","DKK","HKD","HUF","ILS","INR",
       "JPY","MXN","NOK","NZD","PLN","QAR","RON","SAR","SEK","THB","TRY","ZAR"];

I tried , but not working if src="SGD" and tar="CNY" it should rate =0
var res=
      ((src === "SGD" && tar === "AUD") || (src  === "AUD" && tar === "SGD"))?
      rate = 0.4 : 
      ((src === "SGD" && (tar === "EUR" || "GBP" || "USD")) ||
      ((src === "EUR" || "GBP" || "USD") && tar === "SGD"))?
      rate = 0.3:
      (src.indexOf(arr)!=-1 && tar.indexOf(arr)!=-1) ?
      rate = 0.5 : 
     rate=0;


【问题讨论】:

  • 这不是写条件的正确方法:(tar === "EUR" || "GBP" || "USD"))。这将始终评估为 true。
  • 您不需要在三元操作数中嵌套赋值。你可以做var res = cond ? 0.4 : so on

标签: javascript jquery arrays object conditional


【解决方案1】:

您需要为每个条件添加tar ===

(tar === "EUR" || tar === "GBP" || tar === "USD")

或者,使用includes:

(["EUR", "GBP", "USD"].includes(tar))

【讨论】:

    【解决方案2】:

    您使用了 you 或 condition 而没有检查变量。就像"USD" || "GBP" 总是会返回true

    你还有另一个错误,你应该检查一下array.index(variable)。但你检查像

    src.indexOf(arr)!=-1 && tar.indexOf(arr)!=-1
    

    我已经添加了一个demo sn-p 请检查一下。

    我使用了那个特殊的条件。

    (tar === "EUR" || tar === "GBP" || tar === "USD"))
    

    var tar = "DKK";
    var src = "AUD";
    var arr =["AUD","DKK","AED","BGN","CAD","CHF","CZK","DKK","HKD","HUF","ILS","INR",
           "JPY","MXN","NOK","NZD","PLN","QAR","RON","SAR","SEK","THB","TRY","ZAR"];
    var res=
          ((src === "SGD" && tar === "AUD") || (src  === "AUD" && tar === "SGD"))?
          rate = 0.4 : 
          ((src === "SGD" && (tar === "EUR" || tar === "GBP" || tar === "USD")) ||
          ((src === "EUR" || "GBP" || "USD") && tar === "SGD"))?
          rate = 0.3:
          (arr.indexOf(src)!=-1 && arr.indexOf(tar)!=-1) ?
          rate = 0.5 : 
         rate=0;
         
         console.log(res)

    【讨论】:

    • 谢谢,但是如果 src="AUD" && tar "DKK" 应该是 0.5,但返回 0。
    • 代码正确抱歉,“AUD”不在 arr 中,所以返回 0
    • 你还有另一个错误,你应该检查一下array.index(variable)。但 ypu 正在做相反的事情。也用 tat 更新了我的答案。
    【解决方案3】:

    如果条件匹配,您可以采用一个提前返回值的函数

    function check() {
        const group = ["EUR", "GBP", "USD"];
        if (src === "SGD" && tar === "AUD" || src === "AUD" && tar === "SGD") return 0.4;
        if (src === "SGD" && group.includes(tar) || group.includes(src) && tar === "SGD") return 0.3;
        if (arr.includes(src) && arr.includes(tar)) return 0.5;
        return 0;
    }
    

    总之

    var rate = src === "SGD" && tar === "AUD" || src === "AUD" && tar === "SGD"
            ? 0.4
            : src === "SGD" && ["EUR", "GBP", "USD"].includes(tar) || ["EUR", "GBP", "USD"].includes(src) && tar === "SGD"
                ? 0.3
                : arr.includes(src) && arr.includes(tar)
                    ? 0.5
                    : 0;
    

    【讨论】:

    • 谢谢,但是如果 src="AUD" && tar "DKK" 应该是 0.5,但返回 0。
    • 没错,给定的代码中没有'DKK'的条件。
    • 谢谢,代码正确对不起,“AUD”不在 arr 中,所以返回 0
    猜你喜欢
    • 1970-01-01
    • 2021-09-25
    • 2020-12-24
    • 1970-01-01
    • 2012-04-29
    • 2021-08-07
    • 1970-01-01
    • 2018-02-19
    • 2017-09-01
    相关资源
    最近更新 更多