[JavaScript] 다중 단어 필터링 기능 만들기

초보개발자·2020년 12월 2일
0

JavaScript

목록 보기
1/1

코딩을 하다보면 문장에 특정 단어가 들어간 문장을 추출하거나 아니면 제외시키는 등의 작업이 필요한 경우가 있습니다.

1. 한 단어 필터링 하기

const texts = [
    '내년 예산에 재난지원금 3조·4천400만명분 백신비 9천억 포토 연합뉴스',
    '재난지원금에 빚 늘린 슈퍼예산…국가채무 1년새 151조 급증 포토 뉴시스',
    '업체 직원에 경쟁사 것도 팔라 갑질…하이마트 10억 과징금 동영상기사 ',
    '8억 아파트도 공공전세…무주택자라면 무작위 추첨 동영상기사 ',
    '558조 사상최대 슈퍼예산 그늘…文정부 나랏빚 1000조 넘는다',
		]

이런 경우에는 간단히 filterincludes 함수를 이용하여 간단하게 찾거나 제외시킬 수 있습니다.

const filteredText = texts.filter(a => a.includes('아파트')) //아파트가 포함된 문장 찾기

console.log(filteredText)

[ '8억 아파트도 공공전세…무주택자라면 무작위 추첨 동영상기사 ' ]

하지만 꼭 한단어가 아닌 여러 단어를 필터링 할 경우가 있습니다.

2. 여러 단어 필터링 하기

이번에는 여러단어를 포함한 문장을 추출 해 보겠습니다.

const texts = [
    '내년 예산에 재난지원금 3조·4천400만명분 백신비 9천억 포토 연합뉴스',
    '재난지원금에 빚 늘린 슈퍼예산…국가채무 1년새 151조 급증 포토 뉴시스',
    '업체 직원에 경쟁사 것도 팔라 갑질…하이마트 10억 과징금 동영상기사 ',
    '8억 아파트도 공공전세…무주택자라면 무작위 추첨 동영상기사 ',
    '558조 사상최대 슈퍼예산 그늘…文정부 나랏빚 1000조 넘는다',
		]

const filterStrings = ['아파트','과징금','백신']
const filteredTexts = (texts, filterStrings) => { //filterStrings의 단어가 들어간 문장찾기
    let filteredTextsResult = []

    for (let text of texts) {
        for (let filterString of filterStrings) {
            if (text.includes(filterString)) {
                filteredTextsResult.push(text)
            }
        }
    }
    return filteredTextsResult
}

console.log(filteredTexts(texts, filterStrings))

[
'내년 예산에 재난지원금 3조·4천400만명분 백신비 9천억 포토 연합뉴스',
'업체 직원에 경쟁사 것도 팔라 갑질…하이마트 10억 과징금 동영상기사 ',
'8억 아파트도 공공전세…무주택자라면 무작위 추첨 동영상기사 '
]

다행이 원하는 값은 얻을 수 있었지만 몇가지 문제점이 있습니다.

a. filterStrings의 단어들이 포함된 단어를 제외 해야 할 때 추가적인 작업이 필요합니다.
b. 코드의 가독성이 떨어집니다.

그렇기 때문에

결론

const filteredTexts = texts.filter(a => !filterStrings.some(v => a.includes(v))) 
//filterStrings의 단어가 들어가지 않은 문장 찾기

console.log(filteredTexts)

[
'재난지원금에 빚 늘린 슈퍼예산…국가채무 1년새 151조 급증 포토 뉴시스',
'558조 사상최대 슈퍼예산 그늘…文정부 나랏빚 1000조 넘는다'
]

filterincludes 그리고 some 함수를 적절히 사용하여 간결한 코드와 원하는 값을 손쉽게 얻을 수 있습니다.

profile
주니어 개발자입니다!

0개의 댓글