중첩된 배열을 없애고 하나의 배열로 반환하시오.
steamrollArray([[["a"]], [["b"]]]) --> ["a", "b"]
steamrollArray([1, [2], [3, [[4]]]]) --> [1, 2, 3, 4]
steamrollArray([1, [], [3, [[4]]]]) --> [1, 3, 4]
steamrollArray([1, {}, [3, [[4]]]]) --> [1, {}, 3, 4]
function steamrollArray(arr) {
// I'm a steamroller, baby
let pureArr = [];
for (let i = 0; i < arr.length; i++){
recursionFunc(arr[i], pureArr);
}
return pureArr;
}
function recursionFunc (val, arr = []) {
if (!Array.isArray(val)) {
arr.push(val);
} else if (Array.isArray(val) && val.length === 1){
recursionFunc(...val, arr);
} else if (Array.isArray(val) && val.length > 1){
for (let i = 0; i < val.length; i++){
recursionFunc(val[i], arr)
}
}
return;
}
steamrollArray([1, [2], [3, [[4]]]]);
재귀함수를 작성했다.
매개변수로 val
과 arr
인데 arr
은 기본 배열을 가지고 있는 매개변수다. 조건문의 내용은 val
이 배열이 아니었을 때 배열 안에 값을 담는다. val
이 배열이고 길이가 1 이면 다시 recursionFunc
를 실행시킨다. 그렇지 않고 중첩된 배열에서 2 이상의 길이를 가지고 있는 배열이라고 한다면 중첩된 배열 안에서도 또 중첩된 배열이 있으면 그 값도 조회해야 한다. 그러므로 반복문을 이용하고 recursionFunc
를 다시 실행한다. 매개변수 arr
은 계속 가지고 다닌다.