본문 바로가기

개인공부 기록/JavaScript

이중배열에서 특정 항목을 제거하는 함수 만들기

공부 중 오래 고민했던 문제를 내가 이해한 방식대로 적어보기

 

 

문제

 

이중배열에 들어있는 항목 중 특정 조건을 만족하는 항목을 제거하여 반환해야한다.

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 배열에 남아있는 조건을 만족하는 항목들을 전부 제거한 뒤에 다음으로 넘어가도록 하는것이 핵심이다.

 

Recent Posts
Popular Posts
Recent Comments