Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

226
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!