是否有一个lodash函数需要一组针,并搜索一个字符串(haystack)至少一个匹配?例如:
let needles = ['one', 'two', 'three']
let str = 'one in every thousand will quit their jobs'
我需要搜索str
以查看它是否至少包含needles
中的一个。我可以在没有lodash的情况下实现它,但如果有一个函数可以帮助我,我宁愿不重新发明轮子,因为我已经将lodash加载到我的项目中。
答案 0 :(得分:5)
使用
Array#some
,some()
方法测试数组中的某些元素是否通过了提供的函数实现的测试。
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);
答案 1 :(得分:2)
您可以使用Array.protype.some()
和String.prototype.includes()
:
needles.some(function(needle) {
return str.includes(needle);
});
或者他们的lodash等价物:
_.some(needles, function(needle) {
return _.includes(str, needle);
});
答案 2 :(得分:2)
使用_.some()
迭代针,测试是否可以在字符串中找到它。
let found = _.some(needles, function(needle) {
return str.indexOf(needle) != -1;
});
但是,如果有很多针,将它转换为正则表达式可能更有效。
let needleRE = new RegExp(needles.map(_.escapeRegExp).join('|'));
let found = needleRE.test(str);
答案 3 :(得分:1)
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']
匹配将返回匹配的数组。