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

118
Vistas
Convierta una matriz de objetos con un objeto anidado dentro en una nueva matriz con valores del objeto anidado

Estoy tratando de convertir una matriz que existe de objetos con una matriz anidada dentro en una nueva matriz que consta de los valores dentro de la matriz anidada por separado (puede sonar muy complicado pero el ejemplo se muestra muy claro)

Lo que tengo:

 const values = [{ geometry: { "coordinates": [11.4828, 59.1264], "Type": "point" }, properties: { Region: "Oklahoma", sales: { donuts: { 2005: 5, 2006: 8, 2007: 10 }, apples: { 2005: 10, 2006: 8, 2007: 10 } } } }, { geometry: { "coordinates": [9.4828, 76.1264], "Type": "point" }, properties: { Region: "Texas", sales: { donuts: { 2005: 8, 2006: 0, 2007: 7 }, apples: { 2005: 7, 2006: 9, 2007: 4 } } } } ] const filterValue = "donuts"

Cuál es mi objetivo:

 newValues =[{geometry: {"coordinates": [11.4828, 59.1264],"Type":"point"},properties:{Region: "Oklahoma",value:5,time:2005}},{geometry: {"coordinates": [11.4828, 59.1264],"Type":"point"},properties:{Region: "Oklahoma",value:8,time:2006}},{geometry: {"coordinates": [11.4828, 59.1264],"Type":"point"},properties:{Region: "Oklahoma",value:10,time:2007}} AND SO ON FOR ALL THE values that are in const donuts/filter for each value. Could also switch out value for donuts if that is easier } ]

Lo que he probado hasta ahora:

 const newObject = [] values.map((value)=>{ console.log(value.properties.sales.donuts) for (var key in value.properties.sales.donuts) { if (value.properties.sales.donuts.hasOwnProperty(key)) { newObject.push({...value,value.properties:{[key]:value.properties.sales.donuts[key]}) } } }) console.log(newObject)
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Su sintaxis actual no es válida - value.properties: { no es una clave válida en un objeto literal. Dado que desea que la properties de propiedades de salida contenga datos correspondientes a la región y al año también, debe incluirlos en el objeto que se envía. Dado que tampoco necesita que el año sea una clave en el nuevo objeto, sino un valor (con una propiedad de value ), el objeto que se inserta debe reflejar eso.

Solo debe usar .map cuando devuelve un valor dentro de la función del mapeador para crear una nueva matriz. Si está iterando solo para generar efectos secundarios, debe usar un método de iteración genérico más apropiado, como for..of o forEach . En este caso, dado que desea crear varios objetos en la matriz de salida a partir de un objeto asociado en la matriz de entrada, .flatMap sería más adecuado.

Asigne las entradas .donuts y devuelva el nuevo objeto con geometry y properties .

 const values=[{geometry:{coordinates:[11.4828,59.1264],Type:"point"},properties:{Region:"Oklahoma",sales:{donuts:{2005:5,2006:8,2007:10},apples:{2005:10,2006:8,2007:10}}}},{geometry:{coordinates:[9.4828,76.1264],Type:"point"},properties:{Region:"Texas",sales:{donuts:{2005:8,2006:0,2007:7},apples:{2005:7,2006:9,2007:4}}}}]; const filterValue = "donuts"; const output = values.flatMap(({ geometry, properties }) => Object.entries(properties.sales[filterValue]).map(([year, saleCount]) => ({ geometry, properties: { Region: properties.Region, value: saleCount, time: year, } })) ); console.log(output);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Necesitarás un mapa plano aquí

 const values = [ { geometry: { coordinates: [11.4828, 59.1264], Type: 'point', }, properties: { Region: 'Oklahoma', sales: { donuts: { 2005: 5, 2006: 8, 2007: 10, }, apples: { 2005: 10, 2006: 8, 2007: 10, }, }, }, }, { geometry: { coordinates: [9.4828, 76.1264], Type: 'point', }, properties: { Region: 'Texas', sales: { donuts: { 2005: 8, 2006: 0, 2007: 7, }, apples: { 2005: 7, 2006: 9, 2007: 4, }, }, }, }, ]; const mapData = (data, filterBy) => { return data.flatMap((state) => { return Object.entries(state.properties.sales[filterBy]).map( ([time, value]) => { return { ...state, properties: { region: state.properties.Region, time, value, }, }; } ); }); }; const mappedDonuts = mapData(values, 'donuts'); console.log(mappedDonuts);

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