728x90
flat() 함수란?
지난번 flat() 함수를 이용하면 중첩된 배열 구조를 하나로 바꿀 수 있다고 하였다.
이번 문제는 flat함수를 사용하지 않고 대안을 만들어야 한다.
문제
중첩된 배열을 평평하게(flatten) 만들어라.
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 insteadOfFlat(arr) {
let result = String(arr).replace(",,", ",").split(",");
return result.map((v) => {
if(v == '[object Object]') return {};
else if(isNaN(v)) return v; //문자열일 경우
else return parseInt(v);
})
}
작명 센스가 좋지 않아 함수 이름을 좋게 짓지 못했다.
아무튼 flat() 함수 대신에 배열을 문자열로 변환시키고 ,를 기준으로 나누었다(split).
그 후 result안 요소 하나씩 살펴보며 조건문을 검사한다.
다른 풀이
function insteadOfFlat(arr) {
let flat = [].concat(...arr);
return flat.some(Array.isArray) ? steamrollArray(flat) : flat;
}
MDN을 살펴보면 flat() 함수의 대안으로 밑에 코드가 있다.
const flattened = arr => [].concat(...arr);
하지만 이는 중첩 배열을 완벽하게 평평하게(flatten) 하진 못 한다.
([1, [2], [3, [[4]]]] -> [ 1, 2, 3, [ [ 4 ] ] ])
그렇기에 3번째 줄을 추가하여 재귀적으로 문제를 해결하게 만들었다.
(forum.freecodecamp.org/t/freecodecamp-challenge-guide-steamroller/16079)
Intermediate Algorithm Scripting: Steamroller
(문제 출처:www.freecodecamp.org)
320x100
'알고리즘 > FreeCodeCamp' 카테고리의 다른 글
[자바스크립트/알고리즘] 회문(Palindrome) 검사 (0) | 2021.02.04 |
---|---|
[자바스크립트/알고리즘] 2진수 문자열을 영어로 변환 (0) | 2021.02.03 |
[자바스크립트/알고리즘] 프리코드캠프(FCC) - Drop it : 함수가 true일 때 까지 요소 제거 (shift) (0) | 2021.02.02 |
[자바스크립트/알고리즘] 배열 여러개를 합친 후 유일한 값 반환하기 (set 객체, flat 함수) (0) | 2021.02.01 |
[자바스크립트/알고리즘] DNA 페어링 (0) | 2021.02.01 |