다음과 같은 중첩 객체의 배열이 있다고 가정해 보겠습니다. -
const arr = [{
id: 1,
legs:[{
carrierName:'Pegasus'
}]
},
{
id: 2,
legs:[{
carrierName: 'SunExpress'
},
{
carrierName: 'SunExpress'
}]
},
{
id: 3,
legs:[{
carrierName: 'Pegasus'
},
{
carrierName: 'SunExpress'
}]
}]; 이러한 배열을 첫 번째 인수로, 검색어 문자열을 두 번째 인수로 취하는 JavaScript 함수를 작성해야 합니다.
우리 함수는 "carrier name" 속성 값이 두 번째 인수로 지정된 값과 동일한 객체만 포함하도록 배열을 필터링해야 합니다.
위 배열의 경우 두 번째 인수는 "Pegasus"입니다. 그러면 출력은 다음과 같아야 합니다. -
const output = [{
id: 1,
legs:[{
carrierName:'Pegasus'
}]
},
{
id: 3,
legs:[{
carrierName: 'Pegasus'
},
{
carrierName: 'SunExpress'
}]
}]; 예시
이에 대한 코드는 -
const arr = [{
id: 1,
legs:[{
carrierName:'Pegasus'
}]
},
{
id: 2,
legs:[{
carrierName: 'SunExpress'
},
{
carrierName: 'SunExpress'
}]
},
{
id: 3,
legs:[{
carrierName: 'Pegasus'
},
{
carrierName: 'SunExpress'
}]
}];
const keys = ['Pegasus'];
const filterByKeys = (arr = [], keys = []) => {
const res = arr.filter(function(item) {
const thisObj = this;
return item.legs.some(leg => {
return thisObj[leg.carrierName];
});
}, keys.reduce((acc, val) => {
acc[val] = true;
return acc;
}, Object.create(null)));
return res;
}
console.log(JSON.stringify(filterByKeys(arr, keys), undefined, 4)); 출력
콘솔의 출력은 -
[
{
"id": 1,
"legs": [
{
"carrierName": "Pegasus"
}
]
},
{
"id": 3,
"legs": [
{
"carrierName": "Pegasus"
},
{
"carrierName": "SunExpress"
}
]
}
]