map() से नेस्टेड ऑब्जेक्ट की प्रॉपर्टीज को टॉप लेवल पर लाकर नई ऑब्जेक्ट्स की ऐरे बनाएं।
डेटा
const students = [
{
"studentId": 101,
"studentName": "John",
"subjectDetails": {
"subjectName": "JavaScript"
}
},
{
"studentId": 102,
"studentName": "David",
"subjectDetails": {
"subjectName": "MongoDB"
}
}
];
map() से अन-नेस्ट
const flattened = students.map(obj => ({
studentId: obj.studentId,
studentName: obj.studentName,
subjectName: obj.subjectDetails.subjectName
}));
console.log(flattened);
/*
[
{ studentId: 101, studentName: 'John', subjectName: 'JavaScript' },
{ studentId: 102, studentName: 'David', subjectName: 'MongoDB' }
]
*/
डायनामिक प्रॉपर्टी नामों के साथ
function flattenObjects(arr, nestedKey, fieldsToExtract) {
return arr.map(obj => {
const nested = obj[nestedKey];
const extracted = {};
fieldsToExtract.forEach(field => {
extracted[field] = nested[field];
});
// नेस्टेड कुंजी हटाएं, बाकी रखें
const { [nestedKey]: _, ...rest } = obj;
return { ...rest, ...extracted };
});
}
const result = flattenObjects(students, 'subjectDetails', ['subjectName']);
console.log(result);
गहरी नेस्टिंग के लिए रिकर्सिव फ्लैट
function deepFlatten(obj, prefix = '') {
return Object.entries(obj).flatMap(([key, value]) => {
const newKey = prefix ? `${prefix}.${key}` : key;
if (value && typeof value === 'object' && !Array.isArray(value)) {
return deepFlatten(value, newKey);
}
return { [newKey]: value };
});
}
const nested = {
user: {
name: "John",
address: { city: "NYC", zip: "10001" }
}
};
const flat = Object.assign({}, ...deepFlatten(nested));
console.log(flat);
// { 'user.name': 'John', 'user.address.city': 'NYC', 'user.address.zip': '10001' }
चलाने का तरीका
node unnest-array.js
आउटपुट
[
{ studentId: 101, studentName: 'John', subjectName: 'JavaScript' },
{ studentId: 102, studentName: 'David', subjectName: 'MongoDB' }
]
संबंधित: flat() और flatMap()
// ऐरे फ्लैट करना (नेस्टेड ऐरे के लिए)
[[1,2], [3,4]].flat() // [1,2,3,4]
[[1,2], [3,[4,5]]].flat(2) // [1,2,3,4,5]
// map + flat = flatMap
[[1,2], [3,4]].flatMap(x => x) // [1,2,3,4]