Giả sử chúng ta có hai mảng đối tượng như sau:
const data = [
{"XD_A":"XDL","XD_B_1":"38","XD_B_2":"PB"},
{"XD_A":"XDR","XD_B_1":"51","XD_B_2":"PB"},
{"XD_A":"XDL","XD_B_1":"58","XD_B_2":"PB"},
{"XD_A":"XDR","XD_B_1":"38","XD_B_2":"PB"},
{"XD_A":"XDL","XD_B_1":"76","XD_B_2":"PB"},
{"XD_A":"XDR","XD_B_1":"38","XD_B_2":"PB"}
];
const filters =[{"XD_A":"XDR"},{"XD_B_1":"38"}];
Cần viết hàm nhận hai mảng như vậy làm đối số đầu và thứ hai. Hàm chọn chỉ những đối tượng từ mảng đầu tiên (data) chứa tất cả cặp khóa-giá trị tồn tại trong mảng thứ hai (filter). Hàm nhét các đối tượng đó vào mảng mới và trả về.
Với mảng trên, mảng trả về chứa đúng hai đối tượng:
const output = [
{"XD_A":"XDR","XD_B_1":"38","XD_B_2":"PB"},
{"XD_A":"XDR","XD_B_1":"38","XD_B_2":"PB"}
];
Ví dụ
Mã thực hiện như sau:
const data = [
{"XD_A":"XDL","XD_B_1":"38","XD_B_2":"PB"},
{"XD_A":"XDR","XD_B_1":"51","XD_B_2":"PB"},
{"XD_A":"XDL","XD_B_1":"58","XD_B_2":"PB"},
{"XD_A":"XDR","XD_B_1":"38","XD_B_2":"PB"},
{"XD_A":"XDL","XD_B_1":"76","XD_B_2":"PB"},
{"XD_A":"XDR","XD_B_1":"38","XD_B_2":"PB"}
];
const filters =[{"XD_A":"XDR"},{"XD_B_1":"38"}];
const filter = (data, filters) => {
return data.filter(e => {
try{
filters.forEach(o => {
Object.keys(o).forEach(key => {
if(e[key] !== o[key]) throw new 1;
});
});
return true;
}
catch(e){
return false;
}
});
}
console.info(filter(data, filters));
Kết quả
Kết quả trong console sẽ là:
[
{ XD_A: 'XDR', XD_B_1: '38', XD_B_2: 'PB' },
{ XD_A: 'XDR', XD_B_1: '38', XD_B_2: 'PB' }
]