반응형
2022 대선 공약 자가진단 웹을 만들면서 value 값으로 key를 찾을 일이 있었다.
const frequency: number[] = Object.values(obj);
// 1. 원하는 객체의 '값'만 뽑아서 숫자형으로만 이루어진 frequency라는 배열을 만든다(값이 숫자였기 때문에 + typescript였기 때문에 숫자형이라고 표시함)
const freCandidate = Object.keys(obj).filter((key: string) => {
return obj[key] === Math.max(...frequency);
});
// 2. 객체 안에서 가장 큰 key 값을 가진 value를 가져오길 원했기 때문에 이렇게 코드를 짰다
// obj에서 key만 뽑아서 filter을 쓴다(find도 상관없지만 같은 점수가 2번 이상 나올 경우를 대비해 filter을 사용했다)
// key값을 돌면서 obj[key] 즉 각 key의 value가,
// 1번에서 선언했던 frequency 중 가장 큰 수와 같을 시 return한다
: number[] 부분은 typescript를 이용했기 때문에 적어주었다.
이해가 되셨나요?
조금 더 간단하게 설명을 해보자면
const obj ={"a": 2, "b": 1. "c":3. "d":1. "e":0}
가 있다고 해봅시다.
문제: 우리가 원하는 것은 여기서 가장 큰 점수를 가진 알파벳을 뽑는 것입니다.
1. 가장 큰 점수를 뽑은 다음에(value)
2. 가장 큰 점수를 가진 value의 key를 구하면
알파벳이 나올 것입니다.
따라서
1.
Object.values(obj) 를 이용해 object를 돌면서 value로만 이루어진 array를 만들어냅니다.
const frequency = Object.values(obj)
여기서 가장 큰 점수를 뽑아봅니다
const max = Math.max(...frequency)
2.
const selected = Object.keys(obj).filter((key) => {
return obj[key] === max;
});
selected는 Object의 key를 filter을 이용해 돌면서,
obj[key] 즉, 어떠한 key의 value (key에 c가 들어갔다면 3)와 1번에서 구한 max값을 비교해
같은 값만 return합니다.
도움
https://velog.io/@try_catch/JS-value%EA%B0%92%EC%9C%BC%EB%A1%9C-key%EA%B0%92-%EC%B0%BE%EA%B8%B0
반응형