简体   繁体   English

条件运算符无法按预期在javascript中工作

[英]Conditional Operator not working as expected in javascript

Below conditional operator is not working as expected I have included the conditions in scenario based. 以下条件运算符未按预期工作,我已在基于场景的条件中包括了条件。

If no src or tar matches, should be rate=0 如果没有src或tar匹配,则应为rate = 0

If src is present in arr and is SGD and src is present in arr and is SGD (vice-versa), rate be 0.4 如果src存在于arr且为SGD而src存在于arr且为SGD (反之亦然),则费率为0.4

If src is present in arr and is "EUR" || "GBP" || "USD" 如果src存在于arr且为"EUR" || "GBP" || "USD" "EUR" || "GBP" || "USD" "EUR" || "GBP" || "USD" and tar is present in arr and is "SGD" ,(vice-versa), rate be 0.3 "EUR" || "GBP" || "USD" arr "EUR" || "GBP" || "USD"和tar,且"SGD" (反之亦然),汇率为0.3

If src is present in arr and tar is present in arr rate should be 0.5 如果src为存在于arr和焦油的存在arr率应为0.5

scenario: 场景:

(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;


You used you or condition without checking with a variable. 您使用了您或您的条件而未使用变量进行检查。 just like "USD" || "GBP" 就像"USD" || "GBP" "USD" || "GBP" which will return true always. "USD" || "GBP"将始终返回true

and you have another error you should check like array.index(variable) . 并且还有另一个错误,您应该检查类似array.index(variable) but you checked like 但你检查像

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

I have added a demo snippet please check it. 我添加了一个演示代码段,请检查一下。

I used that particular condition like. 我使用了这种特殊条件。

(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) 

You need to add the tar === for every condition: 您需要为每个条件添加tar ===

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

Alternatively, use includes : 另外,用途includes

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

You could take a function which returns a value early, if a condition match 如果条件匹配,您可以采用一个可以尽早返回值的函数

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;
}

In short 简而言之

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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM