Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

231
Vistas
JavaScript: ¿cómo aplano un objeto como este?

¿Cómo implementamos un util flatten para aplanar esto?

 myMap = {  'a': 5,  'b': 6,  'c': {  'f': 9,  'g': {    'm': 17,    'n': 3  }  } }

a

 flatten(myMap) = {  'a': 5,  'b': 6, ‍‌‌‍‌‍‌‍‍‌‍‍‍‍‍‌‍‌‍‍ 'c.f': 9,  'cgm': 17,  'cgn': 3, }

?

Encontré aquí una implementación https://github.com/lukeed/flattie/blob/master/src/index.js pero no pude entender el código. ¿Puede alguien darme una versión más legible?

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Puedes usar este código:

 myMap = { 'a': 5, 'b': 6, 'c': { 'f': 9, 'g': { 'm': 17, 'n': 3 } } } function flatten(obj, pKey = null, res = {}) { for (let key in obj) { const name = pKey ? `${pKey}.${key}` : key; if (typeof obj[key] === "object" && !Array.isArray(obj[key])) { flatten(obj[key], name, res); } else { res[name] = obj[key]; } } return res; } console.log(flatten(myMap))

puedes usarlo flatten(myMap) . En realidad, es simple, pero a veces genera confusión. cómo funciona es haciendo un bucle y luego verificando, si es un objeto y luego llamándose a sí mismo nuevamente (recursivo) para crear un objeto clave profundamente y, si no, crear un objeto clave hasta allí.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Aquí hay quizás una versión un poco más simple:

 const inputObject = { a: 5, b: 6, c: { f: 9, g: { m: 17, n: 3 } } } function flatten(input, keys = [], output = {}) { for (key in input) { const value = input[key] const combinedKeys = [...keys, key] if (typeof value === 'object') { output = flatten(value, combinedKeys, output) } else { output[combinedKeys.join('.')] = value } } return output } console.log(flatten(inputObject)) /* Logs: * { * "a": 5, * "b": 6, * "cf": 9, * "cgm": 17, * "cgn": 3 * } */

La idea es observar recursivamente todas las propiedades del objeto y construir un archivo . -clave separada a medida que profundizamos hasta llegar a un valor hoja.

Puede leer más sobre las funciones recursivas aquí: https://www.freecodecamp.org/news/what-is-recursion-in-javascript/

about 4 years ago · Juan Pablo Isaza Denunciar

0

Aquí hay una opción:

 // Declare an object myMap = { 'a': 5, 'b': 6, 'c': { 'f': 9, 'g': { 'm': 17, 'n': 3 } } } // Declare a flatten function that takes // object as parameter and returns the // flatten object const flattenObj = (myMap) => { // The object which contains the // final result let result = {}; // loop through the object "ob" for (const i in myMap) { // We check the type of the i using // typeof() function and recursively // call the function again if ((typeof myMap[i]) === 'object' && !Array.isArray(myMap[i])) { const temp = flattenObj(myMa**strong text**p[i]); for (const j in temp) { // Store temp in result result[i + '.' + j] = temp[j]; } } // Else store ob[i] in result directly else { result[i] = myMap[i]; } } return result; }; console.log(flattenObj(myMap));
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda