key-value를 갖고 있는 객체에서 value 값으로 key 값을 찾는 방법을 알아보겠습니다.

key로 value를 찾기는 쉽지만, 그 반대는 직접 찾는 코드를 구현해야 합니다.

1. find()를 이용한 방법

아래와 같이 객체의 모든 value 값을 순회하면서, 특정 value 값을 찾고, 그 객체의 key를 리턴하도록 구현할 수 있습니다.

  • findKeyByValue(myObject, "c") : myObject에서 value로 “c” 값을 갖고 있는 key 리턴
  • Object.keys(obj) : 객체에서 key 값들만 배열로 리턴
  • keys.find((key) => obj[key] === searchValue) : keys의 key 값들을 모두 순회하면서, find()의 함수의 결과가 true일 때, 그 key를 리턴
function findKeyByValue(obj, searchValue) {
  const keys = Object.keys(obj);
  const foundKey = keys.find((key) => obj[key] === searchValue);
  return foundKey || null; // 해당 value를 가진 key를 찾지 못한 경우 null 리턴
}

let myObject = { 1: "a", 2: "b", 3: "c", 4: "d", 5: "e" };

let foundKey = findKeyByValue(myObject, "c");
console.log(foundKey);

foundKey = findKeyByValue(myObject, "d");
console.log(foundKey);

Output:

3
4

2. for문을 이용한 방법

find()를 사용하는 방법과 동일한데, 대신 find를 사용하지 않고 for문으로 동일하게 동작하도록 구현하였습니다.

function findKeyByValue(obj, searchValue) {
  for (const key in obj) {
    if (obj.hasOwnProperty(key) && obj[key] === searchValue) {
      return key;
    }
  }
  return null; // 해당 value를 가진 key를 찾지 못한 경우
}

let myObject = { 1: "a", 2: "b", 3: "c", 4: "d", 5: "e" };

let foundKey = findKeyByValue(myObject, "c");
console.log(foundKey);

foundKey = findKeyByValue(myObject, "d");
console.log(foundKey);

Output:

3
4