Is there a lodash function that takes an array of needles, and searches a string (haystack) for at least one match? For example:
let needles = ['one', 'two', 'three']
let str = 'one in every thousand will quit their jobs'
I need to search str
to see if it contains at least one of the needles
. I can implement this without lodash, but if there's a function that will help out I'd rather not reinvent the wheel as I already have lodash loaded into my project.
Is there a lodash function that takes an array of needles, and searches a string (haystack) for at least one match? For example:
let needles = ['one', 'two', 'three']
let str = 'one in every thousand will quit their jobs'
I need to search str
to see if it contains at least one of the needles
. I can implement this without lodash, but if there's a function that will help out I'd rather not reinvent the wheel as I already have lodash loaded into my project.
4 Answers
Reset to default 7Use
Array#some
, Thesome()
method tests whether some element in the array passes the test implemented by the provided function.
let needles = ['one', 'two', 'three']
let str = 'one in every thousand will quit their jobs';
let bool = needles.some(function(el) {
return str.indexOf(el) > -1;
});
console.log(bool);
You can use Array.protype.some()
and String.prototype.includes()
:
needles.some(function(needle) {
return str.includes(needle);
});
Or their lodash's equivalents:
_.some(needles, function(needle) {
return _.includes(str, needle);
});
Use _.some()
to iterate the needles, testing if it can be found in the string.
let found = _.some(needles, function(needle) {
return str.indexOf(needle) != -1;
});
However, if there are lots of needles, it may be more efficient to convert it to a regular expression.
let needleRE = new RegExp(needles.map(_.escapeRegExp).join('|'));
let found = needleRE.test(str);
let needles = ['one', 'two', 'three']
let str = 'one in every thousand will quit their jobs'
let joinedNeedles = needles.join("|");
let regex = new RegExp(joinedNeedles)
let matches = str.match(regex) // ['one']
matches will return an array of matched ones.