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

JavaScript-এ একাধিক অ্যারে থেকে ইউনিক এলিমেন্ট বের করা

ভূমিকা

একাধিক অ্যারে (অ্যারে অফ অ্যারে) দেওয়া থাকলে, সব এলিমেন্ট একত্রিত করে শুধু **ইউনিক (unique)** এলিমেন্টগুলো বের করা - অর্থাৎ যেসব এলিমেন্ট শুধু একবারই আসেছে সব অ্যারে মিলিয়ে।

সম্পূর্ণ কোড

const arr = [
  [12, 45, 65, 76, 76, 87, 98],
  [54, 65, 98, 23, 78, 9, 1, 3],
  [87, 98, 3, 2, 123, 877, 22, 5, 23, 67]
];

const getUnique = (arr) => {
  const newArray = [];
  arr.forEach((el) => newArray.push(...el)); // ফ্ল্যাটেন
  return newArray.filter((item, index) => {
    return newArray.indexOf(item) === newArray.lastIndexOf(item);
  });
};

console.log(getUnique(arr));
// আউটপুট: [12, 45, 54, 78, 9, 1, 2, 123, 877, 22, 5, 67]

কোড ব্যাখ্যা

  1. ফ্ল্যাটেন: `forEach` + `push(...el)` - সব সাব-অ্যারে একত্রিত
  2. ফিল্টার: `indexOf === lastIndexOf` - শুধু একবার আসা এলিমেন্ট রেখে

আউটপুট

[12, 45, 54, 78, 9, 1, 2, 123, 877, 22, 5, 67]

⚠️ পারফরম্যান্স সমস্যা

`indexOf`/`lastIndexOf` প্রতিটি এলিমেন্টের জন্য O(n) করে, মোট **O(n²)**। বড় ডেটার জন্য ধীর।

অপ্টিমাইজড সংস্করণ: Map/Set (O(n))

১. ফ্রিকোয়েন্সি Map (সেরা - O(n))

const getUniqueOptimized = (arrays) => {
  const freq = new Map();
  
  // ফ্ল্যাটেন + কাউন্ট
  for (const subArr of arrays) {
    for (const item of subArr) {
      freq.set(item, (freq.get(item) || 0) + 1);
    }
  }
  
  // ফ্রিকোয়েন্সি ১ ফিল্টার
  return [...freq.entries()]
    .filter(([, count]) => count === 1)
    .map(([val]) => val);
};

২. Set + Filter (সংক্ষিপ্ত)

const getUnique = (arrays) => {
  const flat = arrays.flat();
  const seen = new Set();
  const duplicates = new Set();
  
  for (const item of flat) {
    if (seen.has(item)) duplicates.add(item);
    else seen.add(item);
  }
  
  return flat.filter(item => !duplicates.has(item));
};

৩. Reduce + Object (ES5 কম্প্যাটিবল)

const getUnique = (arrays) => {
  const flat = [].concat(...arrays);
  const freq = flat.reduce((acc, val) => {
    acc[val] = (acc[val] || 0) + 1;
    return acc;
  }, {});
  
  return flat.filter(val => freq[val] === 1);
};

৪. Flat + Filter (ES2019+ - সবচেয়ে ক্লিন)

const getUnique = (arrays) => {
  const flat = arrays.flat();
  return flat.filter(item => flat.indexOf(item) === flat.lastIndexOf(item));
};

তুলনা

পদ্ধতি টাইম স্পেস রিডেবিলিটি
indexOf/lastIndexOf O(n²) O(n) উচ্চ
Map/Set ফ্রিকোয়েন্সি O(n) O(n) মডার্ন, ফাস্ট
Reduce + Object O(n) O(n) ES5 কম্প্যাটিবল

ব্যবহারিক অ্যাপ্লিকেশন

  • ডেটা ডিডুপ্লিকেশন: লগ এন্ট্রি, ইভেন্ট স্টREAM
  • সার্ভে АНালাইসিস: ইউনিক রেসপন্স আইডেন্টিফাই
  • ইনভেন্টরি: সিঙ্গল-স্টক আইটেম খুঁজে বের করা

সারাংশ

ছোট ডেটার জন্য `flat().filter(indexOf===lastIndexOf)` ঠিক আছে। বড় ডেটা/প্রোডাকশনে **Map/Set ফ্রিকোয়েন্সি কাউন্ট (O(n))** ব্যবহার করুন।

  1. জাভাস্ক্রিপ্ট অ্যারেতে আইটেম অ্যাপেন্ড করার পদ্ধতি?

  2. জাভাস্ক্রিপ্ট অ্যারে থেকে ভ্যালু দিয়ে আইটেম রিমুভ করা

  3. জাভাস্ক্রিপ্ট অ্যারেতে সব ইউনিক ভ্যালু বের করা

  4. জাভাস্ক্রিপ্টে স্ট্রিং অ্যারে থেকে কমেন্ট সরানো