В JavaScript существует несколько методов выравнивания вложенного объекта и объединения родительских ключей. Вот несколько подходов, которые вы можете рассмотреть:
Метод 1: рекурсивная функция
Вы можете использовать рекурсивную функцию для перебора вложенного объекта и объединения родительских ключей. Вот пример:
function flattenObject(obj, prefix = '') {
let flattened = {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
let prefixedKey = prefix ? `${prefix}.${key}` : key;
if (typeof obj[key] === 'object' && obj[key] !== null) {
Object.assign(flattened, flattenObject(obj[key], prefixedKey));
} else {
flattened[prefixedKey] = obj[key];
}
}
}
return flattened;
}
// Example usage:
const nestedObject = {
a: {
b: {
c: 1,
d: 2
},
e: 3
},
f: 4
};
const flattenedObject = flattenObject(nestedObject);
console.log(flattenedObject);
Метод 2: использование библиотеки.
Другой вариант — использовать такую библиотеку, как Lodash, которая предоставляет метод Flattenдля выравнивания вложенных объектов. Вот пример:
const _ = require('lodash');
const nestedObject = {
a: {
b: {
c: 1,
d: 2
},
e: 3
},
f: 4
};
const flattenedObject = _.flattenDepth(nestedObject, Infinity);
console.log(flattenedObject);
Метод 3: ES6 Map и уменьшает
Вы также можете использовать функции ES6 Mapи reduceдля достижения желаемого результата. Вот пример:
function flattenObject(obj) {
const flatten = (data, prefix = '') =>
Object.entries(data).reduce((acc, [key, value]) => {
const prefixedKey = prefix ? `${prefix}.${key}` : key;
if (typeof value === 'object' && value !== null) {
return { ...acc, ...flatten(value, prefixedKey) };
}
return { ...acc, [prefixedKey]: value };
}, {});
return flatten(obj);
}
// Example usage:
const nestedObject = {
a: {
b: {
c: 1,
d: 2
},
e: 3
},
f: 4
};
const flattenedObject = flattenObject(nestedObject);
console.log(flattenedObject);
Это всего лишь несколько методов выравнивания вложенного объекта и объединения родительских ключей в JavaScript.