✍ 공부

[ Javascript / React / typescript]객체 value값으로 key 값 찾기.

Po_tta_tt0 2022. 2. 28. 20:48
반응형

 

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

 

 

[JS] value값으로 key값 찾기!

저번부터 value값으로 key값을 찾고 싶은 경우가 있었는데, 방법을 찾지 못해서 우회하는 방법을 사용해왔었다. https://stackoverflow.com/questions/9907419/how-to-get-a-key-in-a-javascript-object-

velog.io

 

 

반응형