Estoy aprendiendo la función de reduce y sus capacidades, sin embargo, parece que no puedo descifrar cómo usarla con los diccionarios.
Por ejemplo, tengo el siguiente diccionario:
const scores = [ { team: 'A', score: 20 }, { team: 'B', score: 17 }, { team: 'C', score: 23 }, { team: 'D', score: 13 } ] Quiero agregar todos los score de los valores de la manera más ordenada posible, he intentado abordar esto yo mismo con:
const test = scores.reduce((first_item, second_item) =>{ console.log(first_item.score, second_item.score) return first_item.score + second_item.score } ) Sin embargo, no suma los valores, y parece que solo funciona para los dos primeros valores en el dict. ¿Cuál es una alternativa más fácil que funcionaría para diccionarios más grandes en una línea de código más pequeña? tal como lo veo, tendría que seguir incluyendo variables en la función de reduce para que coincida con el número de claves.
La función de reducción funciona así:
reduce((previousValue, currentValue) => { /* ... */ } )entonces lo que tienes que hacer es:
const test = scores.reduce((acc, item) =>acc + item.score, 0)Lea la documentación. MDN es un sitio web realmente bueno para esto: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce
Por un puñado, debe pasar los argumentos previousValue, currentValue en lugar de first_item, second_item . Realmente te sugiero que leas la documentación .
Su código no devuelve el puntaje total porque reduce que está tratando de sumar un número e indefinido (haga console.log () dentro de reduce, comprenderá más).
Puedes hacer algo así;
const scores = [ { team: "A", score: 20, }, { team: "B", score: 17, }, { team: "C", score: 23, }, { team: "D", score: 13, }, ]; const totalScore = scores.reduce(function (a, b) { return { score: a.score + b.score }; // returns object with property x }); console.log(totalScore.score);