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

246
Vistas
Separar (n) claves de una matriz de objetos en una sola matriz con nombres de claves

Necesito realizar un filtro en la matriz de objetos para obtener todas las claves. Aunque, siempre que haya un obj dentro de esa clave, necesitaría obtener el nombre de la clave y concatenar con el nombre de la clave del obj, por ejemplo:

 const data = [ id: 5, name: "Something", obj: { lower: True, higher: False } ] result = ["id", "name", "obj.lower", "obj.higher"]

Podría lograr hacer el código anterior, pero, si hay más objs dentro de los datos, tendría que seguir agregando una condición if dentro de mi lógica, me gustaría saber si hay alguna otra forma, así que no No importa cuántos objetos tenga dentro de los objetos, siempre se concatará.
El código que utilicé de la mención anterior:

 const itemsArray = [ { id: 1, item: "Item 001", obj: { name: 'Nilton001', message: "Free001", obj2: { test: "test001" } } }, { id: 2, item: "Item 002", obj: { name: 'Nilton002', message: "Free002", obj2: { test: "test002" } } }, { id: 3, item: "Item 003", obj: { name: 'Nilton003', message: "Free003", obj2: { test: "test003" } } }, ]; const csvData = [ Object.keys(itemsArray[0]), ...itemsArray.map(item => Object.values(item)) ].map(e => e.join(",")).join("\n") // Separating keys let keys = [] const allKeys = Object.entries(itemsArray[0]); for (const data of allKeys) { if (typeof data[1] === "object") { const gettingObjKeys = Object.keys(data[1]); const concatingKeys = gettingObjKeys.map((key) => data[0] + "." + key); keys.push(concatingKeys); } else { keys.push(data[0]) } } //Flating const flattingKeys = keys.reduce((acc, val: any) => acc.concat(val), []);

Lo que me gustaría lograr, supongamos que tengo esta matriz de objetos:

 const data = [ { id: 10, obj: {name: "Name1", obj2: {name2: "Name2", test: "Test"}}} ... ] Final result = ["id", "obj.name", "obj.obj2.name2", "obj.obj2.test"] OBS: The first obj contains all the keys I need, no need to loop through other to get KEYS.

Me gustaría lograr todas las claves del primer objeto de la matriz, y si hay objetos dentro de los objetos, me gustaría concatenar los nombres de obj (obj.obj2key1)

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

0

Puede asignar la clave o las claves de los objetos anidados.

 const getKeys = object => Object .entries(object) .flatMap(([k, v]) => v && typeof v === 'object' ? getKeys(v).map(s => `${k}.${s}`) : k ), getValues = object => Object .entries(object) .flatMap(([k, v]) => v && typeof v === 'object' ? getValues(v) : v ), data = { id: 1, item: "Item 001", obj: { name: 'Nilton001', message: "Free001", obj2: { test: "test001" } } }, keys = getKeys(data), values = getValues(data); console.log(keys); console.log(values);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Denunciar

0

algo como esto

 const itemsArray = [ { id: 1, item: "Item 001", obj: { name: 'Nilton001', message: "Free001", obj2: { test: "test001" } } }, { id: 2, item: "Item 002", obj: { name: 'Nilton002', message: "Free002", obj2: { test: "test002" } } }, { id: 3, item: "Item 003", obj: { name: 'Nilton003', message: "Free003", obj2: { test: "test003" } } }, ]; const item = itemsArray[0]; const getAllKeys = (obj, prefix=[]) => { if(typeof obj !== 'object'){ return prefix.join('.') } return Object.entries(obj).flatMap(([k, v]) => getAllKeys(v, [...prefix, k])) } console.log(getAllKeys(item))

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede usar la recursividad de la siguiente manera. Como typeof([1,3,5]) es object , también tenemos que confirmar que value no es una matriz, !Array.isArray(value) :

 const obj = { id: 10, obj: {name: "Name1", obj2: {name2: "Name2", test: "Test"}}}; const getKeys = (o,p) => Object.entries(o).flatMap(([key,value]) => typeof(value) === 'object' && !Array.isArray(value) ? getKeys(value, (p?`${p}.`:"") + key) : (p ? `${p}.`: "") + key ); console.log( getKeys(obj) );

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