const input = { a: [1, 2, 3], b: { c: { d: { e: 4, }, }, }, f: 5, g: { h: [6, 7], }, }; const outPut = { a: 123, bcde: 4, f: 5, gh: 67, }; const getAllKeysOfObject = (obj, key) => { let tempKey = key; let nextKey = '' if (obj instanceof Object && Object.values(obj).length > 0) { nextKey = Object.values(obj)[0] tempKey += nextKey; getAllKeysOfObject(obj[nextKey], nextKey) } else { return {key: tempKey, value: obj[nextKey]} } } const getObject = (input) => { let tempObj = {} Object.keys(input).forEach(key => { let value = input[key] //[1,2] console.log(value) if (Array.isArray(value)) { let tempStr = '' for(let i =0;i<value.length;i++) { tempStr += value[i] } tempObj[key] = tempStr; } else if (input[key] instanceof Object && Object.values(input[key]).length > 0) { let newObj = getAllKeysOfObject(input[key], key) tempObj[newObj.key] = newobj.value } else { tempObj[key] = input[key] } }) return tempObj } console.log(getObject(input))Cómo obtener la salida { a: 123, bcde: 4, f: 5, gh: 67, }; en javascript
El código anterior no funciona como se esperaba para una clave que funciona bien, pero el objeto anidado falló. Obteniendo el error Uncaught TypeError: No se pueden leer las propiedades de undefined (leyendo '')"
Enlace JSFiddle https://jsfiddle.net/ankitig1602/5v2gp64r/49/
Puede crear una función recursiva con el método de reduce y, si el valor actual no es un objeto, agregar al parámetro del acumulador y también realizar un seguimiento de las claves anteriores y transmitirlas.
const input = { a: [1, 2, 3], b: { c: { d: { e: 4, }, }, }, f: 5, g: { h: [6, 7], }, }; function getOutput(data, pk = '') { return Object.entries(data).reduce((r, [k, v]) => { const key = pk + k if (typeof v === 'object' && !Array.isArray(v)) { Object.assign(r, getOutput(v, key)) } else { r[key] = Array.isArray(v) ? Number(v.join('')) : v } return r; }, {}) } console.log(getOutput(input))Puede obtener las entradas con recursividad.
Este enfoque no necesita entregar las últimas llaves.
const getEntries = object => Object .entries(object) .flatMap(([k, v]) => v && typeof v === 'object' && !Array.isArray(v) ? getEntries(v).map(([l, r]) => [k + l, r]) : [[k, [].concat(v).join('')]] ), input = { a: [1, 2, 3], b: { c: { d: { e: 4 } } }, f: 5, g: { h: [6, 7] } }, result = Object.fromEntries(getEntries(input)); console.log(result);