Синтаксис для проверки равенства переменных - PullRequest
0 голосов
/ 29 июня 2019

Хочу узнать, есть ли возможность оптимизировать (чтобы сделать это более грамотно) синтаксисы сравнения

У меня есть простой код, который проверяет входные данные для моей функции через «если - еще»условные заявления.Я проверяю, равна ли переменная одному из входов или нет, используя логический оператор «ИЛИ».


function cc(card) {
  // Only change code below this line
  if (card==2 || card==3 || card==4 || card==5 || card==6) {
    count+=1;
  }
  else if (card==7 || card==8 || card==9) {
count+=0;
  }
  else if (card==10 || card=="J" || card=="Q" || card=="K" || card=="A") {
    count-=1;
  }
  else {
  return "No such combination";
  }
  if (count>0) {
    return count + " " + "Bet";
  }
  else {
    return count + " " + "Hold";
  }
  // Only change code above this line
}

// Add/remove calls to test your function.
// Note: Only the last will display
cc(7); cc(8); cc(9);

Я хотел бы знать, могу ли я заменить это количество операторов «ИЛИ» другими синтаксисами?Я знаю о методе «переключения», но теперь меня особенно интересует этот подход.

Спасибо!

Ответы [ 4 ]

2 голосов
/ 29 июня 2019

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

const cards = {
    2: 1, 3: 1, 4: 1, 5: 1, 6: 1,
    7: 0, 8: 0, 9: 0,
    10: -1, J: -1, Q: -1, K: -1, A: -1
};
function cc(card) {
    if (card in cards) {
        count += cards[card];
        if (count > 0) {
            return count + " Bet";
        } else {
            return count + " Hold";
        }
    } else {
        return "No such combination"
    }
}

2 голосов
/ 29 июня 2019

Вы можете использовать Array.prototype.includes:

if ([2, 3, 4, 5, 6].includes(card)) {
  count += 1;
} else if ([7, 8, 9].includes(card)) {
  count += 0;
} else if ([10, "J", "Q", "K", "A"].includes(card)) {
  count -= 1;
}
1 голос
/ 29 июня 2019
if (card==2 || card==3 || card==4 || card==5 || card==6) {
count+=1;

можно изменить на

if (card >= 2 && card <= 6) {
count+=1;

EDIT: Если вам нужны только целые числа, вы можете добавить card / 2 == 0.

0 голосов
/ 29 июня 2019

Вы можете написать это так, чтобы сделать его очень читабельным

function cc(cards) {
    let all = [
        { cards : [2,3,4,5,6] : value : 1},
        { cards : [7,8,9]     : value : 0},
        { cards : [10,'J','Q','K','A'] : value : -1}
    ];

    return cards.reduce( (acc,card) => {
        let found = all.find( v => v.cards.indexOf(card) !== -1 );
        if ( !found ) throw 'No such combination';
        return acc + found.value;
    }, 0);
}

Извините за редактирование, я только что понял, что вход является массивом ... Вы можете просто поставить тест броска / удержания за пределы этой функции:)

...