মনে করুন, আমাদের একটি সংখ্যার অ্যারে আছে —
const arr = [1, 6, 3, 1, 3, 1, 6, 3];
আমাদের একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে যা এমন একটি অ্যারে প্রথম ও একমাত্র আর্গুমেন্ট হিসেবে গ্রহণ করবে। তারপর ফাংশনটি অ্যারেতে এমন সব সংখ্যা খুঁজে বের করবে যেগুলো বিজোড় বার আবৃত্ত হয়েছে (শুধু একবার বাদে)।
উদাহরণ,
উপরের অ্যারেতে 1 এবং 3 দুটোই ৩ বার (বিজোড়) আবৃত্ত হয়েছে, তাই ফাংশনটি উভয়ের তৃতীয় আবৃত্তিটি সরিয়ে দেবে।
আউটপুট অ্যারে হবে —
const output = [1, 6, 3, 1, 3, 6];
আমরা একটি হ্যাশম্যাপ ব্যবহার করব প্রতিটি সংখ্যার আবৃত্তি ট্র্যাক রাখতে, এবং শেষে ম্যাপে ইটারেট করে বিজোড়বার আবৃত্ত হয়েছে এমন সংখ্যার শেষ আবৃত্তিটি মুছে দেব।
ম্যাপের প্রতিটি কী একটি অ্যারে মান ধারণ করবে, যার প্রথম উপাদান হবে সেই সংখ্যা কতবার আসেছে এবং দ্বিতীয় উপাদান হবে সেটি শেষে কোন ইনডেক্সে আসেছে।
উদাহরণ
কোডটি নিচে দেওয়া হলো —
const arr = [1, 6, 3, 1, 3, 1, 6, 3];
const removeOddOccurence = (arr =[]) => {
// keeping the original array unaltered
const copy = arr.slice();
const map = {};
arr.forEach((num, ind) => {
if(map.hasOwnProperty(num)){
map[num][0]++;
map[num][1] = ind;
}else{
map[num] = [1, ind];
};
});
for(const key in map){
const [freq, index] = map[key];
if(freq !== 1 && freq % 2 === 1){
copy.splice(index, 1, '');
};
};
return copy.filter(el => el !== '');
};
console.log(removeOddOccurence(arr));
আউটপুট
কনসোল আউটপুট:
[1, 6, 3, 1, 3, 6]