문제 개요
JSON 객체를 유일한 인수로 받는 JavaScript 함수를 작성해야 합니다. 이 JSON 객체는 문자열 키가 숫자 값에 매핑된 구조를 가지고 있습니다. 함수는 객체 내부를 순회하면서 가장 작은 값을 찾아 반환해야 합니다.
예제 코드
이 문제를 해결하는 코드는 다음과 같습니다.
const obj = {
"a": 4,
"b": 2,
"c": 5,
"d": 1,
"e": 3
};
const findSmallestValue = obj => {
const smallest = Object.keys(obj).reduce((acc, val) => {
return Math.min(acc, obj[val]);
}, Infinity);
return smallest;
}
console.log(findSmallestValue(obj));실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
1
코드 동작 원리
코드가 어떻게 동작하는지 단계별로 살펴보겠습니다.
1. Object.keys(obj) : 객체의 모든 키를 배열 형태로 반환합니다. 위 예제에서는 ["a", "b", "c", "d", "e"] 배열이 생성됩니다.
2. reduce() 메서드 : 배열을 순회하면서 누적값(acc)과 현재 키(val)를 이용해 반복적으로 계산을 수행합니다.
3. Math.min() : 누적값과 현재 키에 해당하는 객체의 값을 비교하여 항상 더 작은 쪽을 반환합니다.
4. 초기값 Infinity : reduce의 두 번째 인수인 Infinity는 비교의 시작점 역할을 합니다. 어떤 숫자든 Infinity보다 작기 때문에 객체에 어떤 값이 있더라도 안전하게 최솟값을 찾을 수 있습니다.
대안 방법: Math.min과 스프레드 연산자 활용
더 간결한 방법도 있습니다. Object.values()와 스프레드 연산자(...)를 함께 사용하면 한 줄로 처리할 수 있습니다.
const findSmallestValue = obj => Math.min(...Object.values(obj)); console.log(findSmallestValue(obj)); // 출력: 1
이 방식은 객체의 값만 배열로 추출한 뒤 Math.min에 직접 펼쳐 넣어 최솟값을 구합니다. 코드가 짧고 가독성이 뛰어나다는 장점이 있어, 실무에서는 이 방법이 더 널리 사용됩니다. 다만 객체에 값이 아주 많은 경우 스프레드 연산자가 인수 개수 제한에 걸릴 수 있으므로, 대량의 데이터에는 reduce 방식이 더 안전합니다.