admin管理员组

文章数量:1246503

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.

Share Improve this question asked Aug 8, 2016 at 20:26 BugHunterUKBugHunterUK 8,95818 gold badges74 silver badges128 bronze badges
Add a ment  | 

4 Answers 4

Reset to default 7

Use Array#some, The some() 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.

本文标签: javascriptLodash Search a string for at least 1 value in an arrayStack Overflow