সমস্যা বিবরণ
দুটি অবজেক্ট অ্যারে দেওয়া আছে: data এবং filters। data থেকে সেই অবজেক্টগুলো ফিল্টার করতে হবে যেগুলো filters এর সব কী-ভ্যালু পেয়ার কন্টেইন করে।
সমাধান
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 Error();
});
});
return true;
} catch (e) {
return false;
}
});
};
console.info(filter(data, filters));
আউটপুট
[
{ XD_A: 'XDR', XD_B_1: '38', XD_B_2: 'PB' },
{ XD_A: 'XDR', XD_B_1: '38', XD_B_2: 'PB' }
]
ব্যাখ্যা
filterদিয়ে প্রতিটি ডেটা অবজেক্ট চেক করা।try-catchব্যবহার করে আর্লি এক্সিট: কোনো মিসম্যাচ পেলেthrowকরেfalseরিটার্ন।Object.keys(o).forEachদিয়ে ফিল্টার অবজেক্টের সব কী চেক করা।
ক্লিনার ভার্সন (এস ৬+)
const filterClean = (data, filters) =>
data.filter(item =>
filters.every(f =>
Object.entries(f).every(([k, v]) => item[k] === v)
)
);