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

183
Vistas
¿Cómo mapear una matriz de objetos para extraer valores correspondientes a claves que comienzan con un prefijo?

Tengo una matriz de objetos que se ve así:

 const myArr = [ {id: 1, some_data: { "color_1": { "value": "red" }, "color_2": { "value": "blue" }, "color_3": { "value": "yellow" }, "shape_1": { "value": "square" }, "shape_2": { "value": "circle" } } }, {id: 2, some_data: { "color_1": { "value": "pink" }, "color_2": { "value": "orange" }, "color_3": { "value": "yellow" }, "shape_1": { "value": "square" }, "shape_2": { "value": "triangle" } } }, {id: 3, /* some_data: {...}*/}, {id: 4, /* some_data: {...}*/} ]

Quiero revisar myArr y extraer los valores que corresponden a los colores, para terminar con esta matriz:

 // desired output ["red", "blue", "yellow", "pink", "orange", "yellow"]

Así que descubrí que necesitaría usar String.prototype.startsWith() en las teclas . Desafortunadamente, no he tenido éxito en todos mis intentos de mapear sobre myArr .

Inspirado por esta respuesta, probé:

 const oneAttempt = myArr.map((obj) => Object.keys(obj.some_data) .filter((v) => v.startsWith('color')) .map((e) => obj.some_data[e].value) );

Pero no es exactamente lo que necesito. Probablemente sea una cosa bastante simple, pero no puedo resolver esto.

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

0

Solo necesita el objeto de some_data y obtener una asignación plana.

 const data = [{ id: 1, some_data: { color_1: { value: "red" }, color_2: { value: "blue" }, color_3: { value: "yellow" }, shape_1: { value: "square" }, shape_2: { value: "circle" } } }, { id: 2, some_data: { color_1: { value: "pink" }, color_2: { value: "orange" }, color_3: { value: "yellow" }, shape_1: { value: "square" }, shape_2: { value: "triangle" } } }], result = data.flatMap(({ some_data }) => Object .keys(some_data) .filter(k => k.startsWith('color_')) .map(k => some_data[k].value) ); console.log(result);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede usar una combinación de Array#map() , Array#filter() y Object#entries() como en la demostración a continuación:

 const myArr = [{id: 1,some_data: {"color_1": {"value": "red"},"color_2": {"value": "blue"},"color_3": {"value": "yellow"},"shape_1": {"value": "square"},"shape_2": {"value": "circle"}}},{id: 2,some_data: {"color_1": {"value": "pink"},"color_2": {"value": "orange"},"color_3": {"value": "yellow"},"shape_1": {"value": "square"},"shape_2": {"value": "triangle"}}}]; // desired output //["red", "blue", "yellow", "pink", "orange", "yellow"] const desiredOutput = myArr.map( ({some_data}) => Object.entries(some_data).filter( ([key,{value}]) => key.startsWith('color_') ) .map(([key,{value}]) => value) ) .flat(); //OUTPUT: //["red", "blue", "yellow", "pink", "orange", "yellow"] console.log( desiredOutput );

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