코딩을 하다보면 문장에 특정 단어가 들어간 문장을 추출하거나 아니면 제외시키는 등의 작업이 필요한 경우가 있습니다.
const texts = [
'내년 예산에 재난지원금 3조·4천400만명분 백신비 9천억 포토 연합뉴스',
'재난지원금에 빚 늘린 슈퍼예산…국가채무 1년새 151조 급증 포토 뉴시스',
'업체 직원에 경쟁사 것도 팔라 갑질…하이마트 10억 과징금 동영상기사 ',
'8억 아파트도 공공전세…무주택자라면 무작위 추첨 동영상기사 ',
'558조 사상최대 슈퍼예산 그늘…文정부 나랏빚 1000조 넘는다',
]
const filteredText = texts.filter(a => a.includes('아파트')) //아파트가 포함된 문장 찾기
console.log(filteredText)
[ '8억 아파트도 공공전세…무주택자라면 무작위 추첨 동영상기사 ' ]
하지만 꼭 한단어가 아닌 여러 단어를 필터링 할 경우가 있습니다.
이번에는 여러단어를 포함한 문장을 추출 해 보겠습니다.
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조 넘는다'
]
filter와 includes 그리고 some 함수를 적절히 사용하여 간결한 코드와 원하는 값을 손쉽게 얻을 수 있습니다.