JavaScript-এ দুটি অ্যারে কনক্যাটেনেট না করে, প্রতিটি আলাদা আলাদা `reduce()` করে কী অনুযায়ী হাইয়েস্ট ভ্যালু वाला অবজেক্ট বের করা যায়। এটি মেমরি ইফিশিয়েন্ট ও ফাংশনাল।
ডেটা
const sectionA = [
{ studentName: 'John', studentMarks: 78 },
{ studentName: 'David', studentMarks: 65 },
{ studentName: 'Bob', studentMarks: 98 }
];
const sectionB = [
{ studentName: 'John', studentMarks: 67 },
{ studentName: 'David', studentMarks: 89 },
{ studentName: 'Bob', studentMarks: 97 }
];
reduce() পদ্ধতি
function mergeByMax(acc, current) {
const existing = acc[current.studentName];
if (!existing || current.studentMarks >= existing.studentMarks) {
acc[current.studentName] = current;
}
return acc;
}
const combined = sectionA.reduce(mergeByMax, {});
sectionB.reduce(mergeByMax, combined); // sectionA-এর রেজাল্টে sectionB মার্জ
console.log(Object.values(combined));
চলানোর পদ্ধতি
- কোডটি
mergeMax.jsনামে সংরক্ষণ করুন। - টার্মিনালে চালান:
node mergeMax.js
আউটপুট
[
{ studentName: 'John', studentMarks: 78 },
{ studentName: 'David', studentMarks: 89 },
{ studentName: 'Bob', studentMarks: 98 }
]
কীভাবে কাজ করে
- অ্যাকিউমুলেটর (`acc`) হলো একটি অবজেক্ট (Map-লাইক), কী = studentName।
- প্রতিটি অবজেক্টে: যদি না থাকে বা বর্তমান মার্কস বেশি/সমান → আপডেট।
- দুইবার `reduce()` কল: প্রথমে A, তারপর B (A-এর রেজাল্টে B মার্জ)۔
- `Object.values()` দিয়ে ফাইনাল অ্যারে পাওয়া।
জেনেরিক ফাংশন
function mergeArraysByKeyMax(arrays, key, valueKey) {
return Object.values(
arrays.reduce((acc, arr) =>
arr.reduce((a, item) => {
const k = item[key];
if (!a[k] || item[valueKey] >= a[k][valueKey]) a[k] = item;
return a;
}, acc), {})
);
}
// ব্যবহার
const result = mergeArraysByKeyMax([sectionA, sectionB], 'studentName', 'studentMarks');
তুলনা: concat + reduce vs double reduce
| পদ্ধতি | মেমরি | পারফরম্যান্স |
|---|---|---|
| concat + reduce | O(n+m) স্পেস | এক্সট্রা অ্যালোকেশন |
| Double reduce | O(unique keys) | ইন-প্লেস মের্জ, দ্রুত |