5줄로 배열 병합
배열 평면화는 다차원 배열을 단일 차원 배열로 또는 지정된 차원으로 줄이는 프로세스입니다.
예시:
입력: [1, 2, 3, 4, [5, 6]]
출력: [1, 2, 3, 4, 5, 6]
사고 과정:
1단계: 주어진 배열을 반복해야 합니다.
2단계: 배열이 아닌 경우 각 요소에 대해 새 배열로 푸시합니다.
3단계: 어레이인 경우 1~3단계를 반복합니다.
관찰:
코딩을 시작해 보겠습니다.
function flattenArr(arrToFlatten) {
return arrToFlatten.reduce((acc, value) => {
if (value instanceof Array) {
return acc.concat(flattenArr(value));
}
return acc.concat(value);
}, []);
}
다음과 같이 호출합니다.
const arr = [1, 2, 3, 4, [5, 6]];
flattenArr(arr) // [1, 2, 3, 4, 5, 6]
flattenArr
는 배열 유형의 arrToFlatten
를 인수로 받아들이는 함수입니다. arrToFlatten.reduce
의 출력을 반환합니다. []
.value
이 어레이의 인스턴스가 아닌 경우 acc
유틸리티 기능을 사용하여 concat
에 추가합니다. instanceof
배열인 것으로 판명되면 Array( flattenArr
)를 매개변수로 사용하여 value
를 다시 호출한 다음 acc
와 연결합니다. 이제 이 접근 방식을 사용하여 다차원 배열을 단일 차원 배열로 줄일 수 있습니다.
지정된 레벨까지만 평탄화해야 하고 내부에 중첩된 모든 항목은 그대로 유지해야 하는 경우는 어떻습니까?
인수(
depth
)에서 사용자로부터 다른 값을 얻는 것은 간단합니다.function flattenArr(arrToFlatten, depth) {
return arrToFlatten.reduce((acc, value) => {
if (value instanceof Array && depth > 0) {
return acc.concat(flattenArr(value, depth - 1));
}
return acc.concat(value);
}, []);
}
다음과 같이 호출합니다.
const arr = [1, 2, 3, 4, [5, 6, [7, 8]]];
flattenArr(arr, 1) // [1, 2, 3, 4, 5, 6, [7, 8]]
depth
를 추가하고 감소 함수 내에서 배열을 처리하기 전에 해당 값이 0보다 큰지 확인하십시오. depth
값이 0보다 크면 배열을 평면화해야 함을 의미합니다. 따라서 배열을 사용하여 flattenArr
를 재귀적으로 호출하고 한 수준에서 depth - 1
를 호출합니다. depth
의 값을 1아 맞다 5줄이라고 했는데 여기요!!!
const flattenArr = (arrToFlatten, depth) => (
arrToFlatten.reduce((acc, value) => (
((value instanceof Array && depth) ? [...acc, ...flattenArr(value, depth - 1)] : [...acc, value])
), [])
);
엣지 케이스 처리:
수표를 추가해 보겠습니다.
const typeOfDepth = typeof(depth);
if (!(arrToFlatten instanceof Array) || !(typeOfDepth === 'number')) {
throw new Error('Invalid Argument Supplied');
}
George가 아래 댓글에서 제안한 것처럼 기본Array.flat() 방법이 있지만 browser support을 달성하려면 babel과 같은 js 트랜스파일러의 도움을 받아야 합니다.
내 Website 및
그게 다야!
Reference
이 문제에 관하여(5줄로 배열 병합), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/dhilipkmr/flattening-an-array-in-5-lines-57ca텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)