Explicación de Cuenta los plátanos
Objetivo de este acertijo: Usar el método de arreglo .reduce()
para contar la cantidad de plátanos en un arreglo de frutas.
Tutorial de la solución:
.reduce()
se usa para calcular un valor único de un arreglo, por ejemplo, agregar todos los números de un arreglo en una suma única.
.reduce()
usa 2 argumentos: una función de devolución de llamada y un valor de inicio. La devolución de llamada también usa 2 parámetros: el valor total hasta el momento, y el valor actual.
Por ejemplo, en el siguiente código:
[1, 2, 3].reduce((total, currentNumber) => {
return total + currentNumber;
}, 0)
// Esto devuelve 6
En este código, .reduce()
tiene una función de devolución de llamada y 0
como un valor de inicio para la devolución de llamada. La función de devolución de llamada itera por el arreglo, y agrega cada elemento al valor total.
En este acertijo, queremos que .reduce()
solo agregue a total
si currentFruit === 'banana')
. Si esto es verdadero, total
se incrementará en 1
, y luego se devuelve total
. Si currentFruit
no es 'banana'
, total
se devuelve sin que se incremente, y .reduce()
se mueve al siguiente elemento.
Para completar el acertijo, agrega la prueba currentFruit === 'banana'
a la if statement, luego agrega total++
al bloque de código. Después de la if statement, agrega return total
.
Solución del código de ejemplo:
import { fruits } from 'grasshopper.belafonte';
for (let fruit of fruits) {
console.log(fruit);
}
let bananaCount = fruits.reduce((total, currentFruit) => {
if (currentFruit === 'banana') {
total++;
}
return total;
}, 0);
console.log(bananaCount);
Conceptos de JavaScript: .reduce()
, arreglos, métodos de arreglo, if statements, declaraciones de importación, declaraciones return, for of loops, console.log()
Código adicional (código oculto que se ejecuta antes del código del acertijo):
const _fruits = [...Array(7)].map(() => pickRandom(['banana', 'banana', 'kiwi', 'mango', 'guava', 'orange', 'apple', 'banana']));
defineModule(
'grasshopper.belafonte',
{
fruits: _fruits
}
);