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

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


সমস্যা বিবরণ

নেস্টেড অবজেক্টের একটি অ্যারে দেওয়া আছে যেখানে প্রতিটি অবজেক্টে legs অ্যারে আছে। একটি ক্যারিয়ার নাম দিয়ে ফিল্টার করতে হবে যাতে সেই ক্যারিয়ারের লেগ থাকা অবজেক্টগুলো মात्र থাকে।

ইনপুট:

const arr = [{
  id: 1,
  legs: [{ carrierName: 'Pegasus' }]
}, {
  id: 2,
  legs: [{ carrierName: 'SunExpress' }, { carrierName: 'SunExpress' }]
}, {
  id: 3,
  legs: [{ carrierName: 'Pegasus' }, { carrierName: 'SunExpress' }]
}];

সার্চ কুয়েরি: "Pegasus"

আউটপুট: id 1 এবং 3 वाले অবজেক্টগুলো।

সমাধান

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" }
    ]
  }
]

কোড ব্যাখ্যা

  • keys.reduce দিয়ে ক্যারিয়ার নামগুলোকে লুকআপ অবজেক্টে রূপান্তর করা হয়েছে।
  • filter এর দ্বিতীয় আর্গুমেন্ট হিসেবে লুকআপ অবজেক্ট পাস করা হয়েছে (this হিসেবে)।
  • item.legs.some দিয়ে যাচাই করা হয়েছে যে কোথাও ম্যাচিং ক্যারিয়ার আছে কিনা।
  1. জাভাস্ক্রিপ্ট getPrototypeOf() উদাহরণসহ

  2. জাভাস্ক্রিপ্টে নেস্টেড ডি-স্ট্রাকচারিং

  3. জাভাস্ক্রিপ্টে ইনহেরিট্যান্স উদাহরণসহ

  4. JavaScript দিয়ে লিংক ফিল্টার করার জন্য সার্চ মেনু তৈরি