Условный оператор не работает должным образом в JavaScript - PullRequest
0 голосов
/ 06 мая 2019

Ниже условный оператор не работает должным образом Я включил условия в сценарий на основе.

Если нет совпадений с src или tar, должно быть число = 0

Если src присутствует в arr и равно SGD, а src присутствует в arr и равно SGD (наоборот), коэффициент равен 0,4

Если src присутствует в arr и равно "EUR" || "GBP" || "USD", а tar присутствует в arr и равно "SGD", (наоборот), скорость будет 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
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;


Ответы [ 3 ]

1 голос
/ 06 мая 2019

Вы использовали вас или условие без проверки с переменной.точно так же как "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 =["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)
0 голосов
/ 06 мая 2019

Вы можете взять функцию, которая возвращает значение раньше, если условие соответствует

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;
0 голосов
/ 06 мая 2019

Вам необходимо добавить tar === для каждого условия:

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

В качестве альтернативы используйте includes:

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