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



我正在尝试从数组中检索每个匹配的单词,但.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' ]

你错误地使用了 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>

您要做的问题是主题标签是一个数组,并且匹配需要正则表达式,因此我认为这不是您想要使用的方法。

另一种解决方案是使用 lodash 提供的交集函数

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

如果您确实想使用正则表达式(和匹配),我认为您可能必须遍历两个数组才能获得交集。

下面对我有用

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

由于您已经在使用下划线:

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

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

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

然而,这正是_.intersection所做的,所以在我看来,BBS的答案是最正确的。

相关内容

最新更新