공부 중 오래 고민했던 문제를 내가 이해한 방식대로 적어보기
문제
이중배열에 들어있는 항목 중 특정 조건을 만족하는 항목을 제거하여 반환해야한다.
let basket = [['양파','곰팡이'],['곰팡이','빵','딸기잼'],['귤','곰팡이','사과']];
removeGerm(basket) // [ [ '양파' ], [ '빵', '딸기잼' ], [ '귤', '사과' ] ];
basket에 들어있는 배열 중 특정 조건(ex. 곰팡이)를 제거 하고 배열을 반환하는 방식이다.
최종코드
function removeGerm(basket) {
// 여기에 코드를 작성해주세요!
let temp = [];
for(i = 0; i < basket.length; i++){
for(j = 0; j < basket.length; j++){
if(basket[i][j] === '곰팡이'){
basket[i].splice(j,1)
j--;
}
}
}
console.log(basket)
return basket;
}
let basket = [['양파','곰팡이','양파','곰팡이'],['곰팡이','빵','딸기잼','곰팡이'],['귤','곰팡이','사과','곰팡이','곰팡이']];
removeGerm(basket)
module.exports = { removeGerm }
고민했던(어려웠던) 점
for문의 이중배열을 통해 배열에 접근하는 방식은 어렵지 않았으나, 그 이후에 특정조건을 제거하는 방법을 생각하는 것이 어려웠다.
해결방법
if(basket[i][j] === '곰팡이'){
basket[i].splice(j,1)
j--;
}
혼자 힘으로는 도저히 모르겠어서 구글링의 도움을 받았다.
splice(j,1)을 통해 j열 중 조건과 일치하는 값을 삭제한다. 여러항목이 있는 경우 하나만 제거 되는 문제는 j-- 코드를 추가하여 해결하였다. j=0일때 splice()함수를 실행하고 다음(j=1)으로 넘어가기 때문에 j=0일때 뒤에 있는 조건을 만족하는 항목들은 제거가 되지 않는다. 따라서 j--를 실행하여 여러번 반복해 j=0 배열에 남아있는 조건을 만족하는 항목들을 전부 제거한 뒤에 다음으로 넘어가도록 하는것이 핵심이다.
'개인공부 기록 > JavaScript' 카테고리의 다른 글
비동기처리(async/await) (0) | 2022.08.07 |
---|---|
[JavaScript] CSV파일 추가하여 출력하기 (0) | 2022.07.31 |
배열에 특정단어를 포함한 문자 삭제하기 (2) (0) | 2022.07.23 |
문장에서 특정단어를 포함한 문자 삭제하기 (split, splice, join, indexof) (0) | 2022.07.21 |
접근자 프로퍼티 (Getter, Setter) 알아보기 (0) | 2022.07.08 |