중첩된 배열에서 각 하위 배열의 최댓값을 한 번에 구하고 싶다면 reduce() 메서드와 Math.max() 함수를 함께 사용하면 됩니다.
reduce()는 배열을 순회하면서 누적값(accumulator)을 만들어가는 메서드입니다. 여기에 스프레드 연산자(...)로 펼친 각 하위 배열을 Math.max()에 전달해 최댓값을 계산하고, 그 값을 결과 배열에 차례대로 담으면 됩니다.
코드 예시
const getBiggestNumberFromArraysPassed = allArrays =>
allArrays.reduce((acc, currentArray) => {
acc.push(Math.max(...currentArray));
return acc;
}, []);
console.log(getBiggestNumberFromArraysPassed([[45, 78, 3, 1], [50, 34, 90, 89], [32, 10, 90, 99]]));
동작 원리
- reduce()의 초기값으로 빈 배열([])을 지정합니다.
- reduce()가 [[45, 78, 3, 1], [50, 34, 90, 89], [32, 10, 90, 99]]의 각 하위 배열을 하나씩 순회합니다.
- Math.max(...currentArray)는 스프레드 연산자로 하위 배열의 요소들을 개별 숫자로 펼쳐 그중 최댓값을 계산합니다.
- 계산된 최댓값을 acc 배열에 push하여, 최종적으로 모든 하위 배열의 최댓값만 모인 새로운 배열을 반환합니다.
실행 방법
위 코드를 Node.js 환경에서 실행하려면 파일을 저장한 뒤(예: demo94.js) 터미널에서 다음 명령어를 입력합니다.
node demo94.js
출력 결과
PS C:\Users\Amit\JavaScript-code> node demo94.js [ 78, 90, 99 ]
각 하위 배열 [45, 78, 3, 1], [50, 34, 90, 89], [32, 10, 90, 99]의 최댓값인 78, 90, 99가 순서대로 새로운 배열에 담겨 출력됩니다. 이처럼 reduce()와 Math.max()를 조합하면 반복문 없이도 중첩 배열의 최댓값들을 깔끔하게 추출할 수 있습니다.