Есть ли способ выяснить, содержит ли строка ИЛИ один определённый символ, ИЛИ второй, ИЛИ третий и т.д.?
Знаю только запись по типу "if (str.includes('+') || str.includes('-') || str.includes('*') || str.includes('/'))", но мне очень не нравится, что приходится постоянно переписывать одну и ту же строчку, поэтому нужно что-то вроде "str. ... ('+' || '-' || '*' || '/')". Подскажите плз метод, способный реализовать что-то подобное
JavaScript
Вопрос по JavaScript!
let str = "kj+ko-n/de*";
let re1 = new RegExp("[+-/*]" , 'g' );
let re2 = /[+-/*]/g;
alert( str.search( re1 ) )
alert( str.search( re2 ) )
let re1 = new RegExp("[+-/*]" , 'g' );
let re2 = /[+-/*]/g;
alert( str.search( re1 ) )
alert( str.search( re2 ) )
Ilya Zag
Чтоб определить, есть ли регулярка в строке, ключ g не нужен. Он нужен, чтоб найти все вхождения.
Читай про регулярные выражения
/[-+*/]/.test('ab+cde')
/[-+*/]/.test('ab+cde')
"Есть ли способ выяснить, содержит ли строка ИЛИ один определённый символ, ИЛИ второй, ИЛИ третий и т. д.?"
Эта та вещь, которая меня вымораживала, что нет короткого действия для последовательности одного и того же. Я сделал небольшой набросок (который работал лишь от части), а многоуважаемый Elepsis Eclipse воплотил это следующим образом:
function isif(arr, test_type, test_fn)
{
var BOOL = ({ "||": true, "&&": false })[test_type];
for (var i = 0; i < arr.length; i++)
{
var result = test_fn(arr[i], i, arr);
if (result === BOOL) return BOOL;
}
return! BOOL;
}
Теперь вы можете записать это так, было:
if (str.includes('+') || str.includes('-') || str.includes('*') || str.includes('/'))
Стало:
if (isif(['+', '-', '*', '/'], "||", (e) => str.includes(e)))
Как работает:
1) В качестве первого аргумента принимает массив значений, к которым нужно применить одно и тоже действие.
2) Принимает "||" либо "&&", зависит от того, хотите вы чтобы все значения дали true или хотя бы одно из них.
3) Принимает функцию с производимым действием над каждым элементом массива.
Из-за особенности самого алгоритма, это работает намного быстрее, чем если вы тоже самое напишите нативным способом.
Эта та вещь, которая меня вымораживала, что нет короткого действия для последовательности одного и того же. Я сделал небольшой набросок (который работал лишь от части), а многоуважаемый Elepsis Eclipse воплотил это следующим образом:
function isif(arr, test_type, test_fn)
{
var BOOL = ({ "||": true, "&&": false })[test_type];
for (var i = 0; i < arr.length; i++)
{
var result = test_fn(arr[i], i, arr);
if (result === BOOL) return BOOL;
}
return! BOOL;
}
Теперь вы можете записать это так, было:
if (str.includes('+') || str.includes('-') || str.includes('*') || str.includes('/'))
Стало:
if (isif(['+', '-', '*', '/'], "||", (e) => str.includes(e)))
Как работает:
1) В качестве первого аргумента принимает массив значений, к которым нужно применить одно и тоже действие.
2) Принимает "||" либо "&&", зависит от того, хотите вы чтобы все значения дали true или хотя бы одно из них.
3) Принимает функцию с производимым действием над каждым элементом массива.
Из-за особенности самого алгоритма, это работает намного быстрее, чем если вы тоже самое напишите нативным способом.
Sieras M
спасибо
Похожие вопросы
- Помогите с вопросом про JavaScript Object
- Вопрос по JavaScript (фывпфыпыфвпфы)
- Вопрос по JavaScript, обращение к функции, которая находится в функции...
- Вопрос по JavaScript, смотрите описание
- Есть ли аналоги JavaScript?
- С чего начать учить JavaScript?
- Подскажите книги для изучения javascript? Хочу начать изучать веб программирование javascript подойтет для начала?
- Зачем нужен prototype в JavaScript?
- Тяжело ли выучить JavaScript?
- Как создать квадрат через JavaScript?