JavaScript - 3 логических оператора в операторе If - PullRequest
0 голосов
/ 30 ноября 2018

Хорошо, есть три логических значения.Только одно логическое значение может быть истинным одновременно.Если одно из логических значений уже истинно, оно должно оставаться истинным, если условие достигает его, оно не должно возвращаться к ложному.Обратите внимание, что activeCrate1 должен быть true по умолчанию.

Когда условие достигает activeCrate2, оно имеет значение true, и все другие логические случаи ложны.

Когда условие достигает activeCrate3, оно имеет значение true, а все другие логические случаи ложны.

Но как мне нажать activeCrate1 и вернуть его снова в true, а все другие логические значения должны быть ложными?

И, например, , если условие достигнет activeCrate1, который уже Верно , оно должно оставаться верным и ничего не должно меняться.Как я могу заставить это работать таким образом?

Всего два вопроса, но они должны быть реализованы в одном и том же коде.

Мой код выглядит так:

activeCrate1: true,
activeCrate2: false,
activeCrate3: false

if (state.activeCrate2 === false ) {
    state.activeCrate2 = true
    state.activeCrate1 = false;
    state.activeCrate3 = false;
  } else if (state.activeCrate3 == false){
    state.activeCrate3 = true;
    state.activeCrate1 = false;
    state.activeCrate2 = false;

1 Ответ

0 голосов
/ 30 ноября 2018

Если я правильно понял, вы хотите иметь только один активный элемент в списке и позволить ему меняться со временем.

Я думаю, что было бы легче избежать контроля каждого случая с помощью ifs, потому что это будет легкооставлять ошибки каждый раз, когда вы хотите добавить activeCrate.

Позвольте мне перефразировать то, что, как вы думаете, вы сказали:

  1. Мне нужен начальный список логических значений по умолчанию с первым элементом, установленным вtrue.
  2. Я хочу обновить список.
  3. Если выбранный элемент такой же, как и раньше, я ничего не меняю.
  4. Найдите предыдущее значение true и установите его в false.
  5. Установите для нового элемента значение true.

Вот javascript-эквивалент es5 того, что я написал:

var activeCrates = [true, false, false];

function setActiveCrate(index) {
    // Short circuit code when the same crate is active
    if (activeCrates[index] === true) {
        return;
    }

    // Find previous active crate in order to set it to false
    var previousActiveCrate = activeCrates.indexOf(true);
    activeCrates[previousActiveCrate] = false;

    // Set current active crate to true
    activeCrates[index] = true;
}

Также обратите внимание, что я мутирую activeCratesмассив.

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