JavaScript로 개발하다 보면 객체(Object) 안에서 값이 비어 있는 속성의 키(key) 이름을 찾아야 하는 경우가 종종 있습니다. 예를 들어, 사용자 입력값을 검증할 때 어떤 필드가 비어 있는지 확인해야 할 수 있죠.
예제 객체 살펴보기
다음과 같은 객체가 있다고 가정해 보겠습니다.
var details = {
firstName: 'John',
lastName: '',
countryName: 'US'
}위 객체를 보면 lastName 속성의 값이 빈 문자열('')로 되어 있습니다. 이렇게 값이 비어 있는 키 이름을 어떻게 찾을 수 있을까요?
Object.keys()와 find() 조합으로 해결하기
가장 간단하고 효율적인 방법은 Object.keys() 메서드와 배열의 find() 메서드를 함께 사용하는 것입니다.
- Object.keys(): 객체의 모든 키 이름을 배열 형태로 반환합니다.
- find(): 주어진 조건을 만족하는 첫 번째 요소를 반환합니다. 조건에 맞는 요소가 없으면
undefined를 반환합니다.
다음은 전체 코드입니다.
코드 예제
var details = {
firstName: 'John',
lastName: '',
countryName: 'US'
}
var result = Object.keys(details).find(key => (details[key] === '' ||
details[key] === null));
console.log("The key is=" + result);코드 동작 원리
Object.keys(details)가['firstName', 'lastName', 'countryName']배열을 생성합니다.find()가 각 키를 순회하면서 해당 키의 값이 빈 문자열('')이거나null인지 확인합니다.- 조건을 처음 만족하는 키, 즉
lastName이 결과로 반환됩니다.
프로그램 실행 방법
Node.js 환경에서 위 프로그램을 실행하려면 다음 명령어를 사용합니다.
node fileName.js
실행 결과
여기서는 파일 이름이 demo118.js라고 가정합니다. 위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
PS C:\Users\Amit\JavaScript-code> node demo118.js The key is=lastName
추가 팁
만약 빈 값을 가진 모든 키를 찾고 싶다면 find() 대신 filter()를 사용하면 됩니다.
var emptyKeys = Object.keys(details).filter(key =>
details[key] === '' || details[key] === null);
console.log(emptyKeys); // ['lastName']또한, 공백만 포함된 문자열도 빈 값으로 처리하고 싶다면 trim()을 활용한 조건을 추가할 수 있습니다.
var result = Object.keys(details).find(key =>
typeof details[key] === 'string' && details[key].trim() === '');
console.log(result); // 'lastName'이처럼 Object.keys()와 find()(또는 filter())를 조합하면 복잡한 반복문 없이도 객체 내 빈 값 키를 손쉽게 찾을 수 있습니다. 실무에서 폼 데이터 검증이나 API 응답 처리 시 매우 유용하게 활용되는 패턴이니 꼭 기억해 두세요.