JS/Javascript:.match返回未定义的值

fkvaft9z  于 2023-02-28  发布在  Java
关注(0)|答案(5)|浏览(170)

我试图从array中检索每个匹配的单词,但是.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' ]
nlejzf6q

nlejzf6q1#

match()的使用不正确。这个函数接受一个正则表达式作为参数,而你使用的是一个数组。
您可以通过检查value是否是数组的元素之一来实现您想要的结果。
下面是一个例子:

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>
z9ju0rcb

z9ju0rcb2#

你尝试做的事情的问题是,hashtags是一个数组,而match是一个正则表达式,所以我不认为这是你想要使用的方法。
另一种解决方案是使用lodash提供的交集函数

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

如果您确实想使用正则表达式(和match),我认为您可能必须循环两个数组以获得交集。

o2gm4chl

o2gm4chl3#

下面是我的作品
var filteredMessage = message.split(' ').filter(word => hashtags.includes(word));

bxpogfeg

bxpogfeg4#

由于您已经使用下划线:

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

4szc88ey5#

使用下划线的另一种变体:

_.filter(message.split(' '), _.partial(_.includes, hashtags));

但是,这正是_.intersection所做的,所以在我看来,the answer by BBS是最正确的。

相关问题