2016-08-08 8 views
1

針の配列をとり、文字列(haystack)を少なくとも1つの一致について検索するロダッシュ関数がありますか?たとえば:Lodash:配列内の少なくとも1つの値の文字列を検索

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

私はそれがneedlesの少なくとも一つが含まれているかどうかを確認するためにstrを検索する必要があります。私はlodashなしでこれを実装することができますが、もし私がすでに私のプロジェクトにロードされているので、私はむしろホイールを再開発したくない機能があれば。

答えて

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);

+0

「配列」に 'some'メソッドがありません。ありがとうございました。 – BugHunterUK

+0

@BugHunterUK - あなたのための[__reference__](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)です。 – Rayon

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

_.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); 
+0

それらを使って正規表現を構築している場合は、それらの針を 'escapeRegExp'したいでしょう。 – Blorgbeard

+0

@Blorgbeardこれは標準のJS関数ではないので、コードを示す別の質問へのリンクを入れました。 – Barmar

+0

OPはlodashに言及していたので、私はlodashの機能を参照していました:https://lodash.com/docs#escapeRegExp – Blorgbeard

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

マッチはマッチしたものの配列を返します。

関連する問題