Тема: Хвункція сплющування об'єктів (та масивів)
Хотів був написати функцію, котра б отримувала на вхід об'єкт (котрий може містити в собі й інші об'єкти, і масиви) і повертала б об'єкт з глибиною 1, тобто, поля цього об'єкту повинні містити лише прості значення. І якщо в цьому об'єкті були інші об'єкти, то значення їх полів повинні додаватись до того, сплющеного об'єкту.
Ну, ви зрозуміли. Англіцькою то буде flattening, чи якось так.
Ось, накидав код, ніби працює, але може я чогось не догледів, а ви помітите. Я ж з рекурсією погано дружу, тому треба, аби хтось інший теж на то глянув.
function flattenObject(obj, name) {
if (Array.isArray(obj)) {
return obj.reduce((acc, curr, index) => {
const newName = name ? `${name}_${index}` : index;
if (curr === obj) {
} else
if (Array.isArray(curr)) {
return {
...acc,
...flattenObject(curr, newName)
};
} else if (curr instanceof Object) {
return {
...acc,
...flattenObject(curr, newName)
};
}
acc[newName] = curr;
return acc;
}, {})
} else if (obj instanceof Object) {
return Object.entries(obj).reduce((acc, curr) => {
const newName = name ? `${name}_${curr[0]}` : curr[0];
if (curr[1] === obj) {
/* {self: obj}; */
} else
if (Array.isArray(curr[1])) {
return {
...acc,
...flattenObject(curr[1], newName)
};
} else if (curr[1] instanceof Object) {
return {
...acc,
...flattenObject(curr[1], newName)
};
}
if (name) {
acc[`${name}_${curr[0]}`] = curr[1];
} else {
acc[curr[0]] = curr[1];
}
return acc;
}, {});
}
return obj;
}
console.log(flattenObject(tooMany));