(문제)
Write a function called longestString that finds the longest value string in an object.
오브젝트의 Value 중 가장 길이가 긴 스트링을 가진 longestString이라는 function을 작성하시오.
const info = {
ironman: 'arrogant',
spiderman: 'naive',
hulk: 'strong'
}
const result = longestString(info) // result should be "arrogant"
(문제 이해)
- 오브젝트 내부의 value를 비교해야 한다.
- Object.value() 헬퍼 펑션을 사용해서 Object의 value들을 어레이로 만들어줄 수 있다.
- 어레이 내부의 가장 긴 문자열의 길이(length)를 반환하는 펑션를 구축한다.
(문제 풀이)
longestString 펑션의 구조는 아래와 같이 만든다.
const longestString = (obj) => {
const arr = Object.values(obj)
return findLongest(arr) // (어레이 내부의 가장 긴 문자열을 return하는 함수)
}
- obj를 인수로 받고, 펑션이 실행되면 obj의 value는 펑션 내부에서 어레이 형태로 반환된다.
- 그 어레이는 헬퍼 펑션(findLongest)의 인수가 되며, 그 함수의 리턴값을 리턴한다.
Helper Function : findLongest을 만든다.
const findLongest = (arr, i = 0, result = "") => {
if (arr.length <= i) return result
if (result.length <= arr[i].length) {
result = arr[i]
}
return findLongest(arr, i + 1, result)
}
- arr를 인수로 받고 재귀하는 함수를 구성했다.
- arr는 꼭 받아야 하는 인수, i는 기본적으로 주어지며, 결과를 저장하는 result는 빈 문자열로 한다.
- 재귀함수는 탈출문구가 필수적이다. 인수로 받은 어레이보다 순회 인덱스가 더 커진다면 결과값을 return 한다.
- 순회 인덱스가 어레이를 하나씩 순회하면서, 길이가 긴 string을 result에 계속 저장하고 재귀한다.
- 최종적으로, 길이가 가장 긴 엘리먼트가 result에 저장될 것이며, 그 값은 마지막에 return되는 값이 된다.
또 다른 풀이 (사실 훨씬 편리한 풀이)
(접근 방법)
- Object.value 펑션을 이용해서 values들을 어레이로 만든다는 것은 동일하다.
- values를 어레이로 만든 것이면 reduce 메서드를 바로 붙여줘도 괜찮지 않을까?
(문제 풀이)
const longestString = (obj) => {
return Object.values(obj).reduce((acc, e) => {
if (acc.length < e.length) return e
return acc
}, '')
}
- Object.values(오브젝트) 는 values을 모아놓은 어레이가 된다.
- 그 어레이에는 어레이 메서드인 reduce를 사용할 수 있다.
- reduce의 초기값은 ''(빈 문자열)이고, 배열을 하나씩 순회한다.
- 기존 초기값보다 현재 순회중인 문자열의 길이가 길다면 현재 순회중인 엘리먼트를 리턴한다.
- 그게 아니라면 초기값을 리턴한다.
- 최종적으로 reduce는 어레이 내 가장 긴 엘리먼트를 리턴하게된다.
'Javascript' 카테고리의 다른 글
new 키워드 (0) | 2022.10.12 |
---|---|
(문제) 오브젝트 내 가장 긴 문자열 value를 가진 key를 출력하기 (0) | 2022.10.05 |
Object Helpers (오브젝트 헬퍼 펑션) (0) | 2022.10.05 |
Object, non-primitive (객체, 비원시 유형) (2) | 2022.10.04 |
Object(객체, 오브젝트) 기초 (0) | 2022.10.04 |