Lodash:在数组

时间:2016-08-08 20:26:38

标签: javascript lodash

是否有一个lodash函数需要一组针,并搜索一个字符串(haystack)至少一个匹配?例如:

let needles = ['one', 'two', 'three']
let str = 'one in every thousand will quit their jobs'

我需要搜索str以查看它是否至少包含needles中的一个。我可以在没有lodash的情况下实现它,但如果有一个函数可以帮助我,我宁愿不重新发明轮子,因为我已经将lodash加载到我的项目中。

4 个答案:

答案 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']

匹配将返回匹配的数组。