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

229
Vistas
¿Cómo usar reducir, mapear o filtrar para crear una función para mostrar y contar cada valor de los objetos de matriz?

¿Cómo puedo crear una función que devuelva el número de cada raza?

 const dogs = [ { name:"Cherry", breed:["Shiba", "Poodle"] }, { name:"Bolt", breed:["Shiba"] }, { name:"Pumpkin", breed:["Chihuahua", "Poodle"] }, { name:"Happy", breed:["Poodle"] }, { name:"Tofu", breed:["German Shepherd"] } ];

Quiero imprimir cada raza y su recuento como se muestra a continuación.

 { German Shepherd: 1, Shiba: 2, Poodle: 3, Chihuahua:1 }

Editar: Además, ¿cómo puedo pasar una raza específica como argumento e imprimir solo esa raza y su recuento?

Empecé a comprender algunos conceptos y funciones, pero aún me resulta difícil combinar varios conceptos diferentes.

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

0

Puede usar reduce y repetir eso en las matrices anidadas:

 const dogs = [{name:"Cherry",breed:["Shiba", "Poodle"]},{name:"Bolt",breed:["Shiba"]},{name:"Pumpkin",breed:["Chihuahua", "Poodle"]},{name:"Happy",breed:["Poodle"]}, {name:"Tofu",breed:["German Shepherd"]}]; const result = dogs.reduce((acc, {breed}) => breed.reduce((acc, name) => { acc[name] = (acc[name] ?? 0) + 1; return acc; }, acc) , {}); console.log(result);

Alternativamente, primero puede aplanar los datos en una matriz de cadenas y luego reducir eso:

 const dogs = [{name:"Cherry",breed:["Shiba", "Poodle"]},{name:"Bolt",breed:["Shiba"]},{name:"Pumpkin",breed:["Chihuahua", "Poodle"]},{name:"Happy",breed:["Poodle"]}, {name:"Tofu",breed:["German Shepherd"]}]; const result = dogs.flatMap(({breed}) => breed).reduce((acc, name) => { acc[name] = (acc[name] ?? 0) + 1; return acc; }, {}); console.log(result);

about 4 years ago · Juan Pablo Isaza Denunciar

0

No hay una necesidad real de reduce , filter o map aquí.

  1. Cree un objeto para agrupar las puntuaciones por raza.
  2. Iterar sobre la matriz de dogs , luego iterar sobre la matriz de razas para cada perro. Si la raza aún no existe en el objeto , créela y establezca el valor en cero.
  3. Agregue uno al valor de la raza.

En respuesta a su comentario sobre pasar un argumento de raza separado para obtener los totales de esa raza, solo modifique un poco la función.

 const dogs=[{name:"Cherry",breed:["Shiba","Poodle"]},{name:"Bolt",breed:["Shiba"]},{name:"Pumpkin",breed:["Chihuahua","Poodle"]},{name:"Happy",breed:["Poodle"]},{name:"Tofu",breed:["German Shepherd"]}]; // Pass in the dogs array // and an optional query string function getBreedCount(dogs, query) { // Grouping object const obj = {}; // Iterate over the dogs, and the breeds // updating the grouping object as we go for (const dog of dogs) { for (breed of dog.breed) { obj[breed] ??= 0; ++obj[breed]; } } // If there is a query argument... if (query) { // ...and the query string is a key on the object // Return a string: `<breed>: <value>`... if (obj[query]) return `${query}: ${obj[query]}`; // ...otherwise return a message that // the breed doesn't exist return `${query} doesn't exist`; } // If there is no query argument // return the complete object return obj; } console.log(getBreedCount(dogs)); console.log(getBreedCount(dogs, 'Poodle')); console.log(getBreedCount(dogs, 'Shiba')); console.log(getBreedCount(dogs, 'Bobby Davro'));

Documentación adicional

  • Plantilla/literales de cadena
about 4 years ago · Juan Pablo Isaza Denunciar

0

Puedes hacerlo. Primero, extraiga la clave que desea con el map (raza).

 function getBreed (dog) { return dog.breed; } console.log(dogs.map(getBreed)) // [Array(2), Array(1), Array(2), Array(1), Array(1)]

También puedes simplificar esto con la arrow function

 const breeds = dogs.map(dog => dog.breed) console.log(breeds) // The same output // [Array(2), Array(1), Array(2), Array(1), Array(1)]

Luego, puede fusionar todas las matrices en una matriz unidimensional con reduce y concat .

 const flatten = breeds.reduce((arr, breed) => arr.concat(breed), []) console.log(flatten) // ['Shiba', 'Poodle', 'Shiba', 'Chihuahua', 'Poodle', 'Poodle', 'German Shepherd']

Finalmente, puede contar elementos con reduce

 function count(counter, breed) { if (breed in counter) counter[breed]++; else counter[breed] = 1; return counter } console.log(flatten.reduce(count, {})) // {Shiba: 2, Poodle: 3, Chihuahua: 1, German Shepherd: 1}

Si se pregunta qué sucedió aquí, puede ver la documentación , pero en resumen, ‍El contador es un objeto vacío {} en el primero. Luego, en el paso 1, se convierte en {Shiba:1} porque Sheba no estaba en el mostrador. En el paso 2 se convierte en {Shiba:1,Poodle:1} por la misma razón. En el paso 3, Sheba aumenta y el contador se convierte en {Shiba:2,Poodle:1} porque Sheba existe en el contador antes, etc.

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