Ruby case-case против JavaScript - PullRequest
       0

Ruby case-case против JavaScript

0 голосов
/ 28 февраля 2019

Я родом из мира Ruby и вхожу в мир JavaScript.Одной из особенностей языка Ruby являются операторы case для оценки целевого значения:

my_val = case my_var
           when "var1" then "value1"
           when "var2" then "value2"
           else "value3"
         end

# my_val evaluated to a specific value 
puts my_val

Можно ли сделать что-то лаконичное в JavaScript, как указано выше?Это самое близкое, что я получаю:

let myVal = null;
switch (myVar) {
  case "var1": 
    myVal = "value1";
    break;
  case "var2":
    myVal = "value2";
    break;
  default:
    myVal = "value3";
}

// my_val evaluated to a specific value 
console.log(myVal);

Ответы [ 4 ]

0 голосов
/ 28 февраля 2019

Или вы можете использовать Карта , если она только возвращает значение.

let map = new Map([["var1","value1"], ["var2", "value2"]])
const getVar = myVar => map.has(myVar) ? map.get(myVar) : "value3"

// Use

let myVar = 'var2'
myVar = getVar(myVar)
console.log(myVar)
0 голосов
/ 28 февраля 2019

Вы можете использовать объект с троичным, чтобы установить значение по умолчанию, например:

const obj = {
  "var1":"value1",
  "var2":"value2",
  "defaultVal": "value3" // default value
},
getVal = sVar => sVar in obj ? obj[sVar] : obj["defaultVal"];

// Use case 1:
console.log(getVal("var1")); // get "var1" from the object

// Use case 2:
console.log(getVal("foo")); // get "foo" from the object, doesn't exsist, so we get the default value

Вышеприведенный объект создает объект, где каждый ключ в объекте указывает на значение (т. Е. Во что должен превращаться myVar).Если myVar отсутствует в объекте, по умолчанию оно будет defaultVal, если оно находится в объекте, оно получит соответствующее значение.

0 голосов
/ 28 февраля 2019

Вы можете приблизиться к чему-то похожему, используя Булевы операторы && и || в Javascript:

let my_var = "var2";
let my_val =
(my_var === "var1" && "value1") ||
(my_var === "var2" && "value2") ||
"value3";

console.log(my_val);

let my_var2 = "var3";
let my_val2 =
(my_var2 === "var1" && "value1") ||
(my_var2 === "var2" && "value2") ||
"value3";

console.log(my_val2)
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

СТОРОННОЕ ПРИМЕЧАНИЕ: Этот подход будет работать только для примитивных Javascript значений.Давайте посмотрим на некоторые примеры, где подход терпит неудачу:

let my_var = [1,2,3];
let my_val =
(my_var === "var1" && "value1") ||
(my_var === [1,2,3] && "value2") ||
"value3";

console.log(my_val);

let my_var1 = {"a":"b"};
let my_val1 =
(my_var1 === "var1" && "value1") ||
(my_var1 === {"a":"b"} && "value2") ||
"value3";

console.log(my_val1);

let my_var2 = NaN;
let my_val2 =
(my_var2 === "var1" && "value1") ||
(my_var2 === NaN && "value2") ||
"value3";

console.log(my_val2);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
0 голосов
/ 28 февраля 2019

Ваш код работает:

let myVal = null;
let myVar = 'var1';

switch (myVar) {
  case "var1": 
    myVal = "value1";
    break;
  case "var2":
    myVal = "value2";
    break;
  default:
    myVal = "value3";
}

// my_val evaluated to a specific value 
console.log(myVal);

Но лучше без оператора switch:

const obj = {
  var1: 'value1',
  var2: 'value2',
  default: 'value3'
};
const myVar = 'var1';
const myVal1 = obj[myVar] || obj.default;
const myVal2 = obj['asdfasdf'] || obj.default;

console.log(myVal1);
console.log(myVal2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...