<문제>
1
2
3
4
5
6
7
8
|
var input = [1, undefined, [2, [3, 4, [5, 6]]], NaN, 7, {a:"b"}, 8];
function func(arr) {
return arr;
}
// output 아래 배열 처럼 출력
console.log(input);
// output
// [1, undefined, 2, 3, 4, 5, 6, NaN, 7, {a:"b"}, 8];
|
cs |
<본인 풀이>
여러 방법을 써봤으나 원본의 풀이인 재귀 호출이 아닌 다른 방법으로 풀 수가 없었다.
<원본 블로거 풀이>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
var input = [1, undefined, [2, [3, 4, [5, 6]]], NaN, 7, {a:"b"}, 8];
function func(arr) {
var tempArr = [];
function arrLoop(item) {
for(var i = 0; i < item.length; i++) {
if(typeof item[i] === "object" && item[i].length) {
// item[i] 타입이 object이며, length property가 있는지
// 다시 확인하여 Array 구분
arrLoop(item[i]);
//조건에 맞다면 array 기에 arrLoop 재귀 호출
// arrLoop를 재귀 호출하면 새로운 scope 가 생성되어,
// 기존 호출 함수와 독립적으로 동작
}
else {
tempArr.push(item[i]);
// 조건 불일치 시 임시 변수에 할당
};
};
};
arrLoop(arr);
var arr = tempArr;
// 임시 변수를 arr 변수에 재할당
return arr;
};
console.log(func(input));
// output
// [1, undefined, 2, 3, 4, 5, 6, NaN, 7, {a:"b"}, 8];
|
cs |
<참조> https://blog.skydown.co.kr/develop/36
댓글