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

284
Vistas
¿Cómo puedo agrupar los valores en el objeto y colocarlos en una matriz en JS?

Básicamente, recibo un conjunto de datos como el que proporcioné a continuación y, sin embargo, todos siguen el mismo patrón y tienen la misma cantidad de claves y valores; Estoy buscando agruparlos de manera que la "creación" permanezca igual, y si la matriz tiene más objetos con la misma "creación", los valores del "modelo" se insertan en una matriz como se muestra en el ejemplo 2.

He intentado usar un bucle, pero no pude encontrar la manera de producir 2 matrices diferentes para una sola marca.

 const cars = [ { 'make': 'audi', 'model': 'r8', 'year': '2012' }, { 'make': 'audi', 'model': 'rs5', 'year': '2013' } ];

Y aquí está el resultado final que estoy buscando:

 const carByMake = [ { 'make': 'audi', 'models': ['r8', 'rs5'] 'years': ['2012, 2013'] }, ];
about 4 years ago · Santiago Gelvez
2 Respuestas
Responde la pregunta

0

puedes hacer esto

 const cars = [ { make: "audi", model: "r8", year: "2012", }, { make: "audi", model: "rs5", year: "2013", }, { make: "audi", model: "rs6", year: "2013", }, { make: "bmw", model: "x5", year: "2013", }, { make: "bmw", model: "x6", year: "2013", }, ]; let tempArr = []; let unique = cars.map((data) => { let filterDataArr = tempArr.filter( (filterData) => filterData.make == data.make ); if (filterDataArr && filterDataArr.length > 0) { filterDataArr[0].models = [...filterDataArr[0].models, data.model]; filterDataArr[0].years = [...filterDataArr[0].years, data.year]; } else { let dataArr = { make: data.make, models: [data.model], years: [data.year], }; tempArr.push(dataArr); } }); console.log("tempArr=>", tempArr);
about 4 years ago · Santiago Gelvez Denunciar

0

Hay una forma más fundamental de hacer lo que pides.

Este es un problema muy básico, y debe resolverse usando una solución básica. No es necesario filtrar los resultados, ya que un ciclo simple con una declaración if puede producir los resultados que solicita. Fundamentalmente, la solución para este problema es técnicamente un algoritmo de clasificación, muy simple.

Podría usar un ciclo "for of" , pero creo que este es un excelente ejemplo en el que un ciclo forEach muestra cuán poderoso es. ForEach se abstrae un nivel por encima de sus bucles while & for de nivel bajo. Esa capa extra de abstracción permite pasar una función al bucle forEach. Cada vez (de ahí el nombre "cada uno"), el ciclo forEach itera, se ejecuta la devolución de llamada de forEach, hasta que la matriz a la que se llamó el ciclo forEach se haya iterado por completo (hay excepciones, pero no quiero bajarme pista).

Puede usar el ciclo forEach para resolver su problema. Esa solución se demuestra a continuación. Documenté el código con JSDoc para que pueda copiarlo y pegarlo en su editor, y mostrar los parámetros y tipos en su información sobre herramientas/widget flotante.

 const cars = [ { make: 'audi', model: 'r8', year: 2012 }, { make: 'audi', model: 'rs5', year: 2013 }, ]; /** * @param {string} make - The make that you want to return the models & years for * @param {{make: string, model: string, year: number}[]} cars - An array of car objects that include the model make & year * @return {{make: string, models: string[], years: string[]}} * */ function sortByMake(make, cars) { const models = []; const years = []; cars.forEach((car) => { if (car.make.toLowerCase() === make.toLowerCase()) { models.push(car.model); years.push(car.year); } }); return { make: make, models: models, years: years }; } console.log(sortByMake('Audi', cars)); // OUTPUT: // $ node ./index.js // {make: 'Audi', models: ['r8', 'rs5'], years: [2012, 2013]}
about 4 years ago · Santiago Gelvez 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