-
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