Один из возможных подходов:
var contains = Object.keys(dict).some(function(key) {
return someStr.indexOf(dict[key]) !== -1;
});
Другими словами, итерации по коллекции, на каждом этапе проверки, является ли или не испытанного характера, присутствующих в вашей строке (someStr
). Если это так, немедленно прекращает итерацию (так работает Array.prototype.some
).
Другой подход строит класс символов регулярных выражений, а затем использовать его против строки:
var pattern = RegExp('[' + Object.keys(dict).map(function(k) {
return dict[k];
}).join('') + ']');
var contains = pattern.test(someStr);
Второй подход немного лучше, если тестируемые строки обычно действительно содержат символы из dict
. Также довольно легко увеличить это решение в случае без учета регистра - просто добавьте строку 'i'
в качестве второго параметра вызова RegExp.
Предостережение заключается в том, что вам придется избегать символов, которые будут считаться meta
внутри строки, переданной в конструктор RegExp (например, обратная косая черта). Если в словаре нет таких символов, это не проблема.