Предложение IN с использованием кода JavaScript

У меня есть код JavaScript в моем приложении, который проверяет значения, используя условие ИЛИ (||), как в фрагменте кода ниже. Количество условий ИЛИ не мало в большинстве моего кода.

Вопрос: Есть ли способ сделать код, который имеет многократные условия OR более кратким, используя что-то вроде этого:value IN ('s','b','g','p','z')? Меня интересовало то, что максимально приближено к предложению IN.

if(value === "s" || value === "b" || value === "g" || value === "p" || value === "z") {

  //do something

 }

6 ответов

Решение

Почему не Лодаш includes функционировать?

var val = 's';
var criterion = ['s','b','g','p','z'];
_.includes(criterion, val);

возвращается true;

Самый простой способ - создать массив допустимых значений, а затем убедиться, что ваше значение находится в этом списке. Вы можете использовать indexOf метод для этого:

var allowed = ['s', 'b', 'g', 'p', 'z'];
if (allowed.indexOf(value) !== -1) {
  // do something
}

Стандарт ES6 представляет наборы, которые имеют has способ сделать подобное на уникальных значениях.

Это будет работать для строк, чисел и других простых необъектных значений. Сравнение объектов с === будет успешным, только если массив / набор уже содержит точно такой же объект.

Вы могли бы сделать что-то вроде этого:

var values = ['s','b','g','p','z'];

if (values.indexOf(value) > -1)

Вы также можете использовать JavaScript .includes()помощник.

includes() Метод определяет, содержит ли массив определенный элемент, возвращаяtrueили же false по мере необходимости.

var array1 = [1, 2, 3];

console.log(array1.includes(2));
// expected output: true

var pets = ['cat', 'dog', 'bat'];

console.log(pets.includes('cat'));
// expected output: true

console.log(pets.includes('at'));
// expected output: false

Решение для отдельных персонажей:

var value = 'g';

if (~'sbgpz'.indexOf(value)) {
    document.write(value + ' found');
}

Решение для строковых символов:

var value = 'go';

if (~['so', 'bo', 'go', 'po', 'zo'].indexOf(value)) {
    document.write(value + ' found');
}

Решение для свойств объекта:

var value = 'go';
var toDo = {
    so: function () { document.write('prop so found'); },
    go: function () { document.write('prop go found'); }
};

value in toDo && toDo[value]();

На самом деле, есть in в JavaScript, и он может быть использован для вашего случая точно. Создайте словарь с любыми значениями, которые вам нравятся, но в качестве ключей используйте разрешенные буквы:

allowed = { 's':true, 'b':true, 'g':true, 'p':true, 'z':true };

Теперь вы можете использовать in проверить напрямую (и более эффективно, чем поиск в списке). Здесь скопировано с моей консоли JavaScript:

's' in allowed
true

'q' in allowed
false
Другие вопросы по тегам