Quiero saber cuál es la mejor manera de simplificar un objeto para que solo contenga las propiedades del nivel más bajo del objeto real. Lo explicaré con el siguiente ejemplo:
Objeto inicial
const start = { a: 1, b: { c: 2, d: 3 }, e: 4, f:{ g: 5 } }Objeto buscado
const wanted = { a: 1, c: 2, d: 3, e: 4, g: 5 } const simplified = { a: start.a, c: start.bc, d: start.bd, e: start.e, g: start.fg }Aparentemente, no es posible desestructurar un objeto dentro de otro objeto, pero también ayudaría si pudiera obtener los hijos de los objetos principales más fácilmente, de alguna manera así:
const simplified = { a: start.a, //start.b.children? e: start.e, //start.f.children? }También quiero evitar crear duplicados de las variables fuera de la creación del objeto con desestructuración.
¿Cuál es la mejor práctica para reestructurar un objeto de esa manera?
Simplemente puede crear una función recursiva que agregará propiedades a su resultado solo si el valor actual no es del tipo de object , y si lo es, páselo a otra llamada recursiva.
const start = {"a":1,"b":{"c":2,"d":3},"e":4,"f":{"g":5}} function flatten(data) { return Object.entries(data).reduce((r, [k, v]) => { if (typeof v === 'object') Object.assign(r, flatten(v)) else r[k] = v return r }, {}) } const result = flatten(start) console.log(result)Puede mapear el objeto o las partes anidadas.
function flat(object) { return Object.assign({}, ...Object .entries(object) .map(([k, v]) => v && typeof v === 'object' ? flat(v) : { [k]: v } )); } console.log(flat({ a: 1, b: { c: 2, d: 3 }, e: 4, f:{ g: 5 } }));