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

142
Vistas
Devolución de objeto JSON de una matriz de objetos que contiene las claves y sus valores

Boris tiene una lista de todas las cervezas disponibles en su pub, pero es un gran lío. Le gustaría ver las cervezas agrupadas por marcas. Boris también le dijo que la función debería devolver una matriz de objetos que contenga el nombre de la marca y una matriz de ID de cerveza de esa marca.

Archivo JSON con datos: https://challenge.codingsans.com/beers.json

Ejemplo de salida:

 [ { "brand": "brandName2", "beers": [ "beerID3", "beerID4" ] }, { "brand": "brandName1", "beers": [ "beerID2", "beerID1" ] } ]

//

Hice esto: (Así que básicamente nada. Solo me gustaría tener una idea de cómo resolverlo).

 request = new XMLHttpRequest; request.open('GET', 'https://challenge.codingsans.com/beers.json', true); var data = []; request.onload = function() { if (request.status >= 200 && request.status < 400) { // Date Parse data = JSON.parse(request.responseText); // Success! // Arrays var beerIDs = []; var beerBrand = []; // Iteration for (var key in data) { beerIDs.push(data[key].id); beerBrand.push(data[key].brand); // console.log(beerIDs); // console.log(beerBrand); } console.log(beerIDs); console.log(beerBrand); //final list var finalList = []; } else { // We reached our target server, but it returned an error } }; request.onerror = function() { // There was a connection error of some sort }; request.send();
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Prueba esto:

 request = new XMLHttpRequest; request.open('GET', 'https://challenge.codingsans.com/beers.json', true); var data = []; request.onload = function() { if (request.status >= 200 && request.status < 400) { // Date Parse data = JSON.parse(request.responseText); // Success! const organizedBeers = data.reduce((acc, beers) => { const findIndex = acc.findIndex(beer => beer.brand === beers.brand) if(findIndex > -1) { acc[findIndex].beersId.push(beers.id) } else { acc.push({ brand: beers.brand, beersId: [beers.id], }) } return acc; }, []) console.log(organizedBeers) } else { // We reached our target server, but it returned an error } }; request.onerror = function() { // There was a connection error of some sort }; request.send();
about 4 years ago · Juan Pablo Isaza Denunciar

0

Básicamente, puede crear una nueva matriz que será el resultado final (en nuestro caso, digamos 'aBeerNBrands'). Y puede insertar un nuevo objeto con las propiedades requeridas (como 'marca': cadena, ids: matriz) allí. Y luego puede recorrer el elemento de la matriz principal (en su caso: 'datos') y en el bucle anidado puede verificar si ese objeto de marca está presente en la nueva matriz ('aBeerNBrands') o no, si está presente, entonces presione la identificación a la matriz de ids presente dentro del objeto de aBeerNBrands; de lo contrario, cree un nuevo objeto dentro de 'aBeerNBrands' con las propiedades requeridas. El siguiente código funciona bien para su requerimiento.

 request = new XMLHttpRequest; request.open('GET', 'https://challenge.codingsans.com/beers.json', true); var data = []; request.onload = function() { debugger; if (request.status >= 200 && request.status < 400) { // Date Parse data = JSON.parse(request.responseText); // Success! // Arrays var aBeerNBrands = []; // Iteration for (var key in data) { if(aBeerNBrands.length > 0){ for(var key2 in aBeerNBrands){ if(aBeerNBrands[key2].brand === data[key].brand){ aBeerNBrands[key2].ids.push(data[key].id); break; } if(key2 == aBeerNBrands.length - 1 && aBeerNBrands[key2].brand !== data[key].brand){ var oBrandObject = { brand: data[key].brand, ids: [data[key].id] }; aBeerNBrands.push(oBrandObject); } } } else{ var oBrandObject = { brand: data[key].brand, ids: [data[key].id] }; aBeerNBrands.push(oBrandObject); } // console.log(beerIDs); // console.log(beerBrand); } console.log(aBeerNBrands); } else { // We reached our target server, but it returned an error } }; request.onerror = function() { // There was a connection error of some sort }; request.send();
about 4 years ago · Juan Pablo Isaza Denunciar

0

Siga los pasos a continuación:

  • Agrupar la matriz de entrada de objetos por marca y dar como resultado un objeto usando el método Array.reduce().
  • Estructurar la salida en base al objeto de marca reducido que tenemos.

Demostración de trabajo:

 const data = [ { "id": "ccw-1", "name": "Coding Challenge White", "brand": "Coding Challenge Brewery" }, { "id": "sw-1", "name": "Share White", "brand": "Share", }, { "id": "bspa-1", "name": "Beer Sans Pale Ale", "brand": "Beer Sans Brewery" }, { "id": "ccb-1", "name": "Coding Challenge Brown", "brand": "Coding Challenge Brewery" }, { "id": "ccw-2", "name": "Coding Challenge Wheat", "brand": "Coding Challenge Brewery" }]; // result array const resultArr = []; // grouping by brand and resulting with an object using Array.reduce() method const groupByBrand = data.reduce((group, item) => { const { brand } = item; group[brand] = group[brand] ?? []; group[brand].push(item.id); return group; }, {}); // Finally structuring the output based on the brand object we have. Object.keys(groupByBrand).forEach((item) => { resultArr.push({ 'brand': item, 'beers': groupByBrand[item] }) }) // Result console.log(resultArr);

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