반복문 Splice() 문제

DevOps 블로그·2021년 11월 15일
0
  1. splice 3

Assignment
시장을 봐왔는데 바구니를 보니 곰팡이가 피어있습니다.
바구니에서 곰팡이를 제거하는 함수를 작성해주세요!
let basket = [['양파','곰팡이'],['곰팡이','빵','딸기잼'],['귤','곰팡이','사과']];
removeGerm(basket) // [ [ '양파' ], [ '빵', '딸기잼' ], [ '귤', '사과' ] ];

let basket = [['양파','곰팡이'],['곰팡이','빵','딸기잼'],['귤','곰팡이','사과']];

function removeGerm(arr) {
  for(let i=0; i < arr.length; i++){
    //i는 3미만까지: 0 1 2
    
    for(let j = 0; j <= arr[i].length; j++){
      //j는 arr[0] 이면 2이하 까지: 0 1 2
      //j는 arr[1] 이면 3이하 까지: 0 1 2 3
      //j는 arr[2] 이면 3이하 까지: 0 1 2 3
      
      if(arr[i][j] === '곰팡이'){
        //[0][1], [1][0],[2][1] 곰팡이
        
        arr[i].splice(j,1)
		//곰팡이인 경우 
		//[0][1=j], ['양파','곰팡이']
		//[1][0=j], ['곰팡이','빵','딸기잼']
		//[2][1=j], ['귤','곰팡이','사과']

      }
    }
  }

  return arr;
}

console.log(removeGerm(basket))
  • 결과

- 배열

basket[0][1] => 출력: 곰팡이
basket[1][0] => 출력: 곰팡이
basket[2][1] => 출력: 곰팡이

- splice() 문법
array.splice(start[, deleteCount[, item1[, item2[, ...]]]])

<매개변수>

  • start**
    배열의 변경을 시작할 인덱스입니다. 배열의 길이보다 큰 값이라면 실제 시작 인덱스는 배열의 길이로 설정됩니다. 음수인 경우 배열의 끝에서부터 요소를 세어나갑니다(원점 -1, 즉 -n이면 요소 끝의 n번째 요소를 가리키며 array.length - n번째 인덱스와 같음). 값의 절대값이 배열의 길이 보다 큰 경우 0으로 설정됩니다.
  • deleteCount Optional
    배열에서 제거할 요소의 수입니다.
    deleteCount를 생략하거나 값이 array.length - start보다 크면 start부터의 모든 요소를 제거합니다.
    deleteCount가 0 이하라면 어떤 요소도 제거하지 않습니다. 이 때는 최소한 하나의 새로운 요소를 지정해야 합니다.
  • item1, item2, ... Optional
    배열에 추가할 요소입니다. 아무 요소도 지정하지 않으면 splice()는 요소를 제거하기만 합니다.
    반환 값
    제거한 요소를 담은 배열. 하나의 요소만 제거한 경우 길이가 1인 배열을 반환합니다. 아무 값도 제거하지 않았으면 빈 배열을 반환합니다.

출처: mdn
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/splice

처음에는 이중 for문과 2차원 배열구조에 대한 이해가 부족하여 어떻게 접근해야할지 감이 잡히지 않았다.
그래서 유튜브 등을 통해서 이중 for문과 2차월 배열구조에 관한 영상들을 찾아보면서 전체적인 개념을 이해하려고 하였고, 그 덕분에 어떻게 접근해야할지 방향은 알게 되었다.

그 다음에 내가 마주하게 된 문제는 이중 for문과 2차원 배열로 '곰팡이'라는 값을 조건문을 통해서 걸러내게 된다면 어떻게 그 값을 삭제할 수 있냐는 것을 알지 못해서 구글링을 해보았고 아래의 블로그 글 덕분에 어떻게 해야하는지에 대해서 알게 되었다.

  • 특정값 삭제 방법
let arr = ['a', 'b', 'b', 'c'];

// 원소 'b' 삭제
for(let i = 0; i < arr.length; i++) {
  if(arr[i] === 'b')  {
    arr.splice(i, 1);
    i--;
  }
}

document.writeln(arr); // ['a', 'c']

출처: https://hianna.tistory.com/489

조건문을 통해서 '곰팡이'라는 값을 가진 배열을 가진 값들은 아래와 같다.

  • [0][1], [1][0],[2][1] : 곰팡이

  • [0][1 = j], ['양파','곰팡이']

    [1][0 = j], ['곰팡이','빵','딸기잼']

    [2][1 = j], ['귤','곰팡이','사과']

이렇기 때문에 j번째 인덱스의 값을 1개 삭제를 해주면 결과적으로 '곰팡이'를 제거하고 남은 값들을 받을 수 있게 된다.

이렇게 하나하나씩 직접 내가 값을 대입해보면서 분해해가면서 이해를 하여서 개념들을 이해하면서 문제를 풀 수가 있었다.

profile
IT 엔지니어를 향해 살아가는, 공부하는 기록들을 모아두고 있습니다.

0개의 댓글