다음과 같은 중첩 객체의 배열이 있다고 가정해 보겠습니다. -
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" } ] } ]