2017-10-22 7 views
0

配列から一致する単語をすべて検索しようとしていますが、.matchは未定義の関数を返します。あなたは間違ってmatch()を使用しているJS/Javascript:.matchは未定義の値を返します

var hashtags = [ '#hr', '#acc', '#sales' ]; 

var message = "hello there #hr #acc"; 

var filteredMessage = _.filter(message.split(' '), value => value.match(hashtags)); 

// suppose to return [ '#hr', '#acc' ] 

答えて

2

:私は、私は2つの文字列を比較していますので、私は何かを変換する必要はありません確信しています。この関数は、正規表現をパラメータとして受け取り、配列でそれを使用しています。

valueが配列の要素の1つであるかどうかを確認することで、目的を達成できます。ここで

は一例です:

var hashtags = [ '#hr', '#acc', '#sales' ]; 
 
var message = "hello there #hr #acc"; 
 
var filteredMessage = _.filter(message.split(' '), value => hashtags.indexOf(value) != -1); 
 
console.log(filteredMessage);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js"></script>

1

何をしようとすると問題が配列と一致する正規表現でハッシュタグを要しているので、私は思いませんそれはあなたが使いたい方法です。

代替ソリューションは、あなたが私はあなたがおそらく交差点を取得するために、両方の配列をループにあると思うの正規表現(マッチ)を使用したくない場合はlodash

_.intersection(hashtags, message.split(' ')) 

が提供する交差点の機能を使用することです。

1

あなたは以下

filteredMessage = _.filter(message.split(' '), value => _.find(hashtags, tag => tag === value))

1

var filteredMessage = message.split(' ').filter(word => hashtags.includes(word));

のために働く....すでにアンダースコアを使用しているので、
関連する問題