2017-10-22 6 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

. 이 함수는 정규 표현식을 매개 변수로 받아들이며 배열과 함께 사용합니다.

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>

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

작동