Предложение 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