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

条件运算符在javascript中未按预期工作,javascript,jquery,arrays,object,conditional,Javascript,Jquery,Arrays,Object,Conditional,下面的条件运算符未按预期工作 我已将这些条件包含在基于场景的应用程序中 如果没有src或tar匹配,则应为rate=0 如果src出现在arr和SGD中,src出现在arr和SGD中(反之亦然),则费率为0.4 如果src存在于arr中,且为“欧元”|英镑”|美元”且tar存在于arr中,且为“新加坡元”,则费率为0.3 如果src出现在arr中,而tar出现在arr中,则费率应为0.5 情景: (src==="SGD" and tar==="AUD") or (src==="AUD" &

下面的条件运算符未按预期工作 我已将这些条件包含在基于场景的应用程序中

如果没有src或tar匹配,则应为rate=0

如果src出现在
arr
SGD
中,src出现在
arr
SGD
中(反之亦然),则费率为0.4

如果src存在于
arr
中,且
为“欧元”|英镑”|美元”
且tar存在于
arr
中,且
为“新加坡元”
,则费率为0.3

如果src出现在
arr
中,而tar出现在
arr
中,则费率应为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

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

(tar === "EUR" || tar === "GBP" || tar === "USD")
或者,使用
包括

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

您未使用变量检查就使用了或条件。就像
“USD”| |“GBP”
一样,它将始终返回
true


您还有另一个错误,您应该检查类似于
array.index(variable)
。但是你检查了一下

src.indexOf(arr)!=-1 && tar.indexOf(arr)!=-1
我已经添加了一个演示片段,请检查它

我用了那个特殊的条件

(tar === "EUR" || tar === "GBP" || tar === "USD"))
var tar=“DKK”;
var src=“AUD”;
var arr=[“澳元”、“丹麦克朗”、“AED”、“BGN”、“加元”、“瑞士法郎”、“捷克克朗”、“丹麦克朗”、“港币”、“匈牙利法郎”、“国际标准普尔”、“印度卢比”,
“日元”、“墨西哥比索”、“挪威克朗”、“新西兰元”、“印尼国家电力公司”、“卡塔尔航空公司”、“马来西亚国家铁路公司”、“新加坡特别行政区”、“瑞典克朗”、“泰铢”、“土耳其铁路公司”、“南非兰特”];
var res=
((src==“新加坡元”和&tar==“澳大利亚元”)| |(src==“澳大利亚元”和&tar==“新加坡元”))?
比率=0.4:
(src==“新加坡元”和&(tar==“欧元”| tar==“英镑”| tar==“美元”))||
(src==“欧元”“英镑”“美元”和tar==“新加坡元”)?
比率=0.3:
(arr.indexOf(src)!=-1和&arr.indexOf(tar)!=-1)?
比率=0.5:
比率=0;

console.log(res)
如果条件匹配,您可以使用提前返回值的函数

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;

这不是编写条件的正确方法:
(tar==“EUR”| |“GBP”| |“USD”)
。这将始终计算为true。您不需要在三元操作数中嵌套赋值。你可以做
var res=cond?0.4:依此类推
谢谢,但如果src=“AUD”和&tar“DKK”应为0.5,但返回0。没错,给定代码中没有条件使用
“DKK”
。谢谢,代码是正确的,对不起,“AUD”不在arr中,这是y返回0谢谢,但是如果src=“AUD”和&tar“DKK”应为0.5,但返回0.code是正确的,对不起,“AUD”在返回0的数组中不存在,并且您有另一个错误,您应该检查类似
array.index(variable)
。但ypu的做法恰恰相反。我的答案也更新了。
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;