(문제) Write a function called keyOfLongestString that finds the longest value string but return its key.
오브젝트 내 밸류 중 가장 긴 문자열을 가진 key를 출력하는 keyOfLongestString라는 함수를 작성하라.
const info = {
ironman: 'arrogant',
spiderman: 'naive',
hulk: 'strong'
}
const result = keyOfLongestString(info)
// result should be "ironman"
// because "arrogant" is longer than "naive" and "strong"
const info2 = {
a: 'xxxxxx',
bc: 'xx',
abc: 'xxx'
}
const result2 = keyOfLongestString(info2)
// result2 should be "a"
// "xxxxxx" is longer than "xx" and "xxx"
(문제 이해)
- 가장 긴 value의 길이는 Object.values를 이용해서 어레이로 만든 뒤, 내부를 순회해서 찾을 수 있다.
- key를 알면 value에 접속할 수 있다.
- 그렇다면 어떻게 그것을 key와 매치시킬 것인가?
- 중요한 것은 key를 return 하는 것이다.
- 문제 풀이는 2가지로 나눠볼 수 있다. (values 이용, entries 이용)
(values와 reduce를 이용하여 문제 풀기)
- key를 알면 object의 value에 접근할 수 있다는 것을 인지해라.
- reduce는 단순히 누적만 하는 메서드가 아니다는 것을 인지해라.
const keyOfLongestString = (obj) => {
const keysArray = Object.keys(obj)
return keysArray.reduce((acc, e) => {
if (obj[acc].length < obj[e].length) return e
return acc
})
}
- Object.keys()를 이용해 obj의 키들을 어레이로 만들어낸다.
- < 키를 이용해 obj의 밸류에 접근할 수 있음을 기억해라. >
- reduce를 통해 keysArray를 순회하면서 각 키를 통해 obj에 접근하여 value의 문자열 길이를 비교한다
(entries를 이용해 문제 풀기)
- Object.entries()는 obj의 키와 밸류를 어레이로 감싼 뒤, 다시 전체적으로 어레이로 감싸 반환한다. (2D Array)
- 즉, 어레이 접근법을 통해 key와 value를 구분할 수 있다.
- 최종 산물은 [키, 값]이 될 것이므로, 최종 처리를 잘 해야 한다.
const keyOfLongestString = (obj) => {
const entries = Object.entries(obj)
const longestValueArr = entries.reduce((acc, e) => {
if (acc[1].length < e[1].length) return e
return acc
})
return longestValueArr[0]
}
- entries를 이용해 키와 값들이 하나의 어레이로 묶인 2차원 배열로 만든다.
- 키와 밸류가 같은 어레이안에 묶였고, 0번 인덱스에는 키가, 1번 인덱스에는 value가 존재한다.
- 이를 이용해 가장 긴 value를 가진 키와 밸류의 어레이를 구한다.
- 이후 리턴할 때 정답키를 가진 어레이의 0번째 인덱스를 리턴한다.
'Javascript' 카테고리의 다른 글
reduce 심화 학습 (오브젝트에 reduce 활용하기) (0) | 2022.10.13 |
---|---|
new 키워드 (0) | 2022.10.12 |
(문제) 오브젝트 내 value 중 가장 긴 문자열을 출력하기 (0) | 2022.10.05 |
Object Helpers (오브젝트 헬퍼 펑션) (0) | 2022.10.05 |
Object, non-primitive (객체, 비원시 유형) (2) | 2022.10.04 |