কম্পিউটার টিউটোরিয়াল

জাভাস্ক্রিপ্টে অ্যাসোসিয়েটিভ অ্যারে ফিল্টার করা অন্য অ্যারে দিয়ে


সমস্যা বিবরণ

দুটি অবজেক্ট অ্যারে দেওয়া আছে: 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)
    )
  );
  1. জাভাস্ক্রিপ্টে অবজেক্টের অ্যারে অন্য একটি অবজেক্টের অ্যারে দিয়ে ফিল্টার করা

  2. জাভাস্ক্রিপ্টে অ্যারে দিয়ে অ্যারে ফিল্টার করুন

  3. জাভাস্ক্রিপ্টে অন্য একটি অ্যারে দিয়ে অবজেক্ট অ্যারে ফিল্টার করা

  4. জাভাস্ক্রিপ্টে নেস্টেড কালেকশন ফিল্টার করা