我正在尝试从数组中检索每个匹配的单词,但.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的答案是最正确的。