Giả sử chúng ta có mảng đối tượng lồng nhau như sau:
const arr = [{
id: 1,
legs:[{
carrierName:'Pegasus'
}]
}, {
id: 2,
legs:[{
carrierName: 'SunExpress'
},
{
carrierName: 'SunExpress'
}]
}, {
id: 3,
legs:[{
carrierName: 'Pegasus'
},
{
carrierName: 'SunExpress'
}]
}];
Cần viết hàm nhận mảng như vậy làm đối số đầu tiên và chuỗi truy vấn làm đối số thứ hai. Hàm sẽ lọc mảng để chỉ chứa các đối tượng có thuộc tính "carrier name" khớp với đối số thứ hai.
Nếu đối số thứ hai là "Pegasus", đầu ra sẽ là:
const output = [{
id: 1,
legs:[{
carrierName:'Pegasus'
}]
}, {
id: 3,
legs:[{
carrierName: 'Pegasus'
},
{
carrierName: 'SunExpress'
}]
}];
Ví dụ
Mã thực hiện như sau:
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));
Kết quả
Kết quả trong console sẽ là:
[
{
"id": 1,
"legs": [
{
"carrierName": "Pegasus"
}
]
},
{
"id": 3,
"legs": [
{
"carrierName": "Pegasus"
},
{
"carrierName": "SunExpress"
}
]
}
]