ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2020.05.10 NestedArray -> flattenArray ( not used flat method)
    Dev 2020. 5. 10. 19:33
    let Arr = [ [1,2], [true,false], ['x', 'z']];
    // 위처럼 2중배열을 flat 없이 [1,2,true,false,'x','y']로 풀어보자

    일단  concat은 배제하였다. concat method의 예시는, 

    let arr1 = [1,2,3];
    let arr2 = [4,5,6];
    let arr3 = arr1.concat(arr2);
    console.log(arr3)
    //arr3 = [1,2,3,4,5,6]
    //2개의 1차원배열을 새 배열로 합치는 방법이라고 생각했기 떄문이다.

    문제에서 요구 되었던 부분은 이렇다

    01.주어진 배열에서, 배열의 배열이 빈배열일 경우 출력값이  [ [], [] ,[] ] 이 아닌 [] 인 방법으로 출력하라고 했다.

    for(let i=0; i<arr.length; i++){
        if(arr[i].length===0){
          delete arr[i];
        } //이와 같이 풀어서 출력결과를 만족 시켰고,

    02.배열의 배열을 어떻게 풀어서 넣는가!! 여기서 굉장히 난해하다고 생각했다.

      새배열을 만들어서 그대로 push를 해준다고 해도 결국, 배열의 배열일 뿐이다..

      여기서 배열이 아닌상태로 새 빈배열에 넣어줄 방법은 무엇인가.. 

      newArr.push(arr.concat(arr[i])도 해보고, 방법이 안떠올라서 머리가 터질거 같아서, 동네 한바퀴 돌고 오자 싶어서 

      생각 난 것이. 단지 2중배열일 뿐이니까, 배열의 배열의 요소들이 배열이 아니면 새 배열에 집어넣으면 되지!!

    else if(!Array.isArray(arr[i])){
          newArr.push(arr[i])
        }
        else if(Array.isArray(arr[i])){
          let nestedArr = arr[i]
          for(let j=0; j<nestedArr.length; j++){
            //arr[i]가 배열일때 arr[i]를 반복문으로 탐색해서, 배열을 풀 방법은 무엇인가.
            if(!Array.isArray(nestedArr[j])){
              //arr[i]의 element가 배열이 아니라면 newArr에 넣자.
              newArr.push(nestedArr[j]);

    단순히 배열의 배열의 요소가 배열이 아니면 넣어주면 된다. 라는 생각이 쉽게 떠오르지 않았다.

     

    사실 callback의 reduce로 풀어버리면 금방 끝날 수 있는 문제 인데,

    내가 정확하게 reduce가 어떻게 작동하는지 모르는 것도 모르고, for문으로도 풀어봐야 다른 문제에서 유연하게 코드를 짤 수 있을 것 같았다.

    'Dev' 카테고리의 다른 글

    2020.05.14 for문->reduce함수  (0) 2020.05.14
    Chrome debug (nested array -> flatten)  (0) 2020.05.12
    2020.05.11 Math.min()  (0) 2020.05.11
    2020.05.06 NaN in Falsy  (0) 2020.05.06

    댓글

Designed by Tistory.