위 글에서 이어지는 글입니다.
이전에 배열에 특정 조건을 포함하는 단어를 삭제하는 방법에 대한 글을 작성하였는데 indexOf 함수의 특성상 최초 1번의 단어는 삭제하지만 이후에 나오는 문자열에 단어가 포함되더라도 삭제되지 않고, 출력이 된다는 문제점이 있었다.
이 글에서는 그것을 해결한 방법에대해 포스팅 한다.
const adress = '경기도 시흥시 삼미시장길';
const arr = adress.split(' ');
for(i = 0; i < arr.length; i++) {
if(arr[i].indexOf("시", 0) !== -1) {
arr.splice(i,1);
i--;
}
} address2 = arr.join(' ');
console.log(address2);
먼저, indexOf함수가 조건을 만족하는 값을 찾으면 해당 위치를 반환하고 종료한다는 것에 대해 생각했다. 그래서 indexOf함수가 여러번 반복하여 배열을 돌 수 있다면 조건을 포함하는 단어를 모두 삭제할 수 있을것이라고 생각하였다. 그래서 indexOf 함수로 배열을 검사하고, i값을 초기화 시켜 처음부터 다시 검사하는 방식으로 코드를 작성하였다.
먼저 최초 검사 전의 배열은 다음과 같을 것이다.
1. for문에서 i=0인 경우 arr[1] 의 시흥시의 값이 -1이 아니기때문에 splice() 함수를 통해 배열에서 삭제가 된다.
이후 i--를 통해 i=0으로 초기화 한다. 현재 배열의 상태는 다음과 같을것이다.
2. i값이 0으로 초기화 되었기 때문에 i = 0부터 다시 for문을 통해 진행되고, indexOf를 통해 다음 단어를 제거할 수 있다.
그래서 최종적으로는 조건을 만족하지 않는 단어만 남게 된다.
문제를 해결하고 안 사실인데 이전에 똑같은 주제를 가지고 고민하고글을 작성한 적이 있었다..이사실을 알고 얼마나 허무하던지..
하지만 까먹어서 그런 사실도 모르고 열심히 고민했던게 아닐까싶다. 잊어버리지 않도록 복습도 잘 해야겠다.
'개인공부 기록 > JavaScript' 카테고리의 다른 글
비동기처리(async/await) (0) | 2022.08.07 |
---|---|
[JavaScript] CSV파일 추가하여 출력하기 (0) | 2022.07.31 |
문장에서 특정단어를 포함한 문자 삭제하기 (split, splice, join, indexof) (0) | 2022.07.21 |
접근자 프로퍼티 (Getter, Setter) 알아보기 (0) | 2022.07.08 |
이중배열에서 특정 항목을 제거하는 함수 만들기 (0) | 2022.06.24 |