데이터를 다루다 보면 id 값이 숫자, 빈 문자열(""), null 등 다양한 형태로 섞여 있는 배열에서 특정 ID에 해당하는 레코드만 골라내야 하는 경우가 자주 있습니다. 이럴 때 JavaScript의 filter() 메서드를 활용하면 간단하고 깔끔하게 해결할 수 있습니다.
예제 데이터
다음과 같이 id 값이 비어 있거나 null인 항목이 포함된 객체 배열이 있다고 가정해 보겠습니다.
var details=[
{id:101,name:"John",age:21},
{id:111,name:"David",age:24},
{id:1,name:"Mike",age:22},
{id:"",name:"Sam",age:20},
{id: 1,name:"Carol",age:23},
{id:null,name:"Robert",age:25},
{id:1,name:"Adam",age:24},
{id:"",name:"Chris",age:23}
];
filter() 메서드 활용하기
배열의 filter() 메서드는 콜백 함수가 true를 반환하는 요소만 모아 새로운 배열을 생성합니다. 따라서 obj.id === 1이라는 조건을 사용하면 id가 정확히 1인 레코드만 추출할 수 있습니다. 특히 일치 연산자(===)를 사용하면 타입 변환 없이 엄격하게 비교되기 때문에, 빈 문자열이나 null 같은 값은 자동으로 걸러집니다.
예제 코드
var details=[
{id:101,name:"John",age:21},
{id:111,name:"David",age:24},
{id:1,name:"Mike",age:22},
{id:"",name:"Sam",age:20},
{id: 1,name:"Carol",age:23},
{id:null,name:"Robert",age:25},
{id:1,name:"Adam",age:24},
{id:"",name:"Chris",age:23}
];
var getIdWithValue1 = details.filter(obj => obj.id === 1);
console.log(getIdWithValue1);
위 프로그램을 실행하려면 Node.js 환경에서 다음 명령어를 입력합니다. 여기서는 파일 이름을 demo181.js로 가정합니다.
node fileName.js
실행 결과
코드를 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
PS C:\Users\Amit\javascript-code> node demo181.js
[
{ id: 1, name: 'Mike', age: 22 },
{ id: 1, name: 'Carol', age: 23 },
{ id: 1, name: 'Adam', age: 24 }
]
결과를 보면 원본 배열에서 id가 1인 세 개의 객체(Mike, Carol, Adam)만 새 배열에 담겨 반환된 것을 알 수 있습니다. 빈 문자열("")이나 null을 가진 항목은 조건을 만족하지 않으므로 자연스럽게 제외됩니다. 이처럼 filter()를 사용하면 지저분한 데이터가 섞여 있어도 원하는 조건의 레코드만 안전하게 추출할 수 있습니다.