Array 다차원 배열 접근해서 for 문 돌리기 (push, splice 사용)

라용·2022년 8월 1일
1

위코드 - 스터디로그

목록 보기
1/100

wecode 사전 스터디 레플릿 과제를 풀며 정리한 내용입니다.

아래 코드는 10이상의 숫자만 배열에 담아 리턴하는 함수입니다. 다차원 배열로 접근해서 for 을 중복해서 사용합니다.

let numBox = [[1,2,15,3],[4,5,6,10],[31,7,8,9,20]];

function extractOverTen(list) {
  let temp = []; //빈 배열을 생성하고
  for(let i=0; i < list.length; i++) { // 전체 배열을 돌고
    for(let j=0; j < list[i].length; j++) { // 그 안의 배열을 돕니다.
      if(list[i][j] >= 10) { // [i][j] 로 배열안의 배열의 요소를 선택하고 확인
        temp.push(list[i][j]); // 조건에 만족하면 해당 요소를 빈배열에 넣습니다.
      }  
    }
  }
  return temp; // 새롭게 구성된 요소를 출력합니다.
}

extractOverTen(numBox) // [ 15, 10, 31, 20 ]

전체 배열의 인덱스는 i 그 안의 배열의 인덱스는 j 로 설정되어 있습니다.

다른 예제로 아래 배열에서 곰팡이만 뺀 값을 얻고 싶다면,

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

// 위 코드와 비슷하게 만들면,

function removeGerm(arr) {
  let food = [];
  for(let i = 0; i < arr.length; i++){
    for(let j = 0; j < arr[i].length; j++){
      if(arr[i][j] !== '곰팡이'){
        food.push(arr[i][j]);
      }
    }
  }
  return food;
}

removeGerm(basket);
//["양파", "빵", "딸기잼", "귤", "사과"]

만약 여기서 기존의 다차원배열을 유지하면서 곰팡이만 제거하고 싶다면, 빈 배열을 생성하지 않고 조건문을 수정한 후 splice 메소드를 활용합니다.

// [ [ '양파' ], [ '빵', '딸기잼' ], [ '귤', '사과' ] ]
// 이런 결과물을 원한다면 아래와 같이 쓸 수 있다.

function removeGerm(arr) {
  // 기존 배열에서 빼주기만 할 것이라 빈 배열 생성이 필요 없다.
  for(let i = 0; i < arr.length; i++){
    for(let j = 0; j < arr[i].length; j++){
      if(arr[i][j] === '곰팡이'){ // 곰팡이가 있는 경우
        arr[i].splice(j, 1); // 전체 배열만 순회하면서 그 배열에 splice 적용
      }
    }
  }
  return arr;
}

removeGerm(basket);

위 함수는 아래와 같이 줄여서 작성할 수 있습니다.

function removeGerm(list) {
  for (let i = 0; i < list.length; i++) {
    list[i].splice(list[i].indexOf("곰팡이"), 1)
  } return list
}
profile
Today I Learned

0개의 댓글