JavaScript - 3 логических оператора в инструкции If

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

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

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

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

И например, если условие попадает в 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;

Я не понимаю вопроса. Вы указываете точные шаги того, как он должен себя вести, а затем спрашиваете, как это делать. Вы буквально говорите: «Если условие выполняется ... оно должно оставаться верным». Итак, напишите инструкцию if и не меняйте ее?

Lazar Ljubenović 30.11.2018 20:40

добавьте несколько вариантов использования и разделите вопрос на части.

Nina Scholz 30.11.2018 20:40

Все, что вам нужно, это еще один {activeCrate1: true, activeCrate2: false, activeCrate3: false,} после else if. Я думаю, это то, что ты хотел

Code Maniac 30.11.2018 20:47

Мой код работает для activeCrate2 и activeCrate3, но случай для activeCase1 не будет работать должным образом, поэтому я не включил его в код.

Max Drljić 30.11.2018 21:01

Только одно логическое значение может иметь значение True, а когда это произойдет, все остальные значения должны быть False. Если activeCrate1 уже имеет значение True, он должен оставаться True, если одно и то же условие встречается с ним дважды подряд или бесконечное количество раз, поэтому внутри него не восстанавливается значение True-False.

Max Drljić 30.11.2018 21:04
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
5
507
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

  1. Мне нужен начальный список логических значений по умолчанию с первым элементом, установленным в значение true.
  2. Хочу обновить список.
  3. Если выбранный элемент такой же, как и раньше, я ничего не меняю.
  4. Найдите предыдущее истинное значение и установите для него значение 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.

Другие вопросы по теме

Почему я продолжаю получать неверную ошибку ввода относительно этого строкового оператора?
Как использовать пользовательский ввод в операторе if-else и как вернуть код в цикле, если пользовательский ввод не соответствует запросу?
Powershell: рекурсивные каталоги, в которых существует расширение файла, если существует, записать команду, если не запустить команду
Передача значения из другого столбца в ifelse внутри dplyr :: mutate
Я хочу добавить собственный шорткод только на определенную страницу в WordPress
Почему эти два оператора if не совпадают?
TypeError: неверный тип операнда для унарной конкатенации +: 'unicode' python
Могу ли я выполнить метод, когда поле ввода достигает определенной длины?
Объединение условий во внутреннем операторе if с внешним оператором else - C#
Как я могу убедиться, что введенный ввод соответствует индексу массива, чтобы вывести правильное решение?