다음과 같이 사용자 이름이 고유한 ID에 매핑되어 있는 객체 배열이 있다고 가정해 보겠습니다.
const arr = [
{"4": "Rahul"},
{"7": "Vikram"},
{"6": "Rahul"},
{"3": "Aakash"},
{"5": "Vikram"}
];배열에서 확인할 수 있듯이 하나의 이름이 여러 개의 ID와 매핑될 수 있습니다. 반대로 하나의 ID가 서로 다른 두 이름에 동시에 매핑되는 경우는 없습니다.
우리가 작성해야 할 JavaScript 함수는 첫 번째 인수로 위와 같은 배열을, 두 번째 인수로 이름 문자열을 받습니다. 그리고 두 번째 인수로 전달된 이름에 매핑된 모든 ID를 배열 형태로 반환해야 합니다.
풀이 접근 방식
배열을 순회하면서 각 객체의 첫 번째 키(ID)를 추출하고, 해당 키에 연결된 값이 찾으려는 이름과 일치하는지 확인합니다. 일치하면 그 키를 결과 배열에 추가하는 방식으로 문제를 해결할 수 있습니다.
예제 코드
다음은 전체 코드입니다 −
const arr = [
{"4": "Rahul"},
{"7": "Vikram"},
{"6": "Rahul"},
{"3": "Aakash"},
{"5": "Vikram"}
];
const name = 'Vikram';
const findUserId = (arr, name) => {
const res = [];
for(let i = 0; i < arr.length; i++){
const key = Object.keys(arr[i])[0];
if(arr[i][key] !== name){
continue;
};
res.push(key);
};
return res;
};
console.log(findUserId(arr, name));코드 설명
findUserId 함수는 먼저 빈 배열 res를 생성한 뒤, for 반복문으로 입력 배열의 모든 요소를 순회합니다. 각 순회마다 Object.keys() 메서드를 사용해 현재 객체의 첫 번째 키(즉, 사용자 ID)를 가져오고, 그 키에 해당하는 값이 두 번째 인수로 전달된 이름과 일치하지 않으면 continue로 건너뜁니다. 이름이 일치하는 경우에는 해당 키를 결과 배열에 추가합니다. 모든 순회가 끝나면 일치하는 ID들이 담긴 배열을 반환합니다.
출력 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다 −
['7', '5']
'Vikram'이라는 이름은 ID '7'과 '5'에 각각 매핑되어 있으므로, 두 ID가 포함된 배열이 정상적으로 반환된 것을 확인할 수 있습니다.