reduce() मेथड के साथ स्प्रेड ऑपरेटर (...) का उपयोग करके ऑब्जेक्ट्स की ऐरे को सिंगल मर्ज्ड ऑब्जेक्ट में बदलें।
बुनियादी उदाहरण
const studentDetails = [
{ Name: "Chris" },
{ Age: 22 },
{ City: "New York" }
];
// reduce से मर्ज करें
const merged = studentDetails.reduce((acc, obj) => {
return { ...acc, ...obj };
}, {});
console.log(merged);
// { Name: 'Chris', Age: 22, City: 'New York' }
संक्षिप्त रूप (एरो फंक्शन)
const merged = studentDetails.reduce((acc, obj) => ({ ...acc, ...obj }), {});
Object.assign() विकल्प
// Object.assign के साथ (ES6)
const merged = Object.assign({}, ...studentDetails);
console.log(merged); // समान परिणाम
डुप्लीकेट कीज़ हैंडलिंग
बाद के ऑब्जेक्ट्स पहले वालों को ओवरराइट करते हैं:
const data = [
{ id: 1, name: "First" },
{ id: 2, name: "Second" },
{ id: 1, name: "Duplicate ID" } // id: 1 ओवरराइट होगा
];
const merged = data.reduce((acc, obj) => ({ ...acc, ...obj }), {});
console.log(merged); // { id: 1, name: 'Duplicate ID' }
नेस्टेड ऑब्जेक्ट्स के लिए डीप मर्ज (एडवांस्ड)
function deepMerge(target, source) {
const result = { ...target };
for (const key of Object.keys(source)) {
if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {
result[key] = deepMerge(target[key] || {}, source[key]);
} else {
result[key] = source[key];
}
}
return result;
}
const nested = [
{ user: { name: "John", address: { city: "NYC" } } },
{ user: { age: 30, address: { zip: "10001" } } }
];
const merged = nested.reduce((acc, obj) => deepMerge(acc, obj), {});
console.log(merged);
// { user: { name: 'John', age: 30, address: { city: 'NYC', zip: '10001' } } }
चलाने का तरीका
node flatten-objects.js
आउटपुट
{ Name: 'Chris', Age: 22, City: 'New York' }
कौन सा उपयोग करें?
| विधि | पक्ष | विपक्ष |
|---|---|---|
reduce + spread | पठनीय, फ्लेक्सिबल | थोड़ा धीमा |
Object.assign | तेज़, बुनियादी | डीप मर्ज नहीं |
lodash.merge | डीप मर्ज, मजबूत | बाहरी निर्भरता |
सिफारिश
सरल फ्लैट मर्ज के लिए: Object.assign({}, ...array) सबसे तेज़ और संक्षिप्त है।