Lección 14 · 14 de 20
reduce, find, some y every · JavaScript
Resuma y busque en arrays de JavaScript: reduce para sumar o agrupar, find y findIndex para encontrar, some y every para comprobar.

`reduce()` combina todos los elementos en un solo valor. Recibe una función con el acumulador (sum) y el elemento actual (o), y un valor inicial, 0. En cada vuelta, lo que devuelve la función pasa a ser el nuevo acumulador: al final, sum es el total de todos los pedidos.
El valor inicial puede ser cualquier cosa. Con un objeto vacío {}, reduce agrupa los importes por cliente: acc[o.customer] || 0 toma lo que ya llevaba ese cliente, o 0 si es el primero, y le suma el pedido.
Sin valor inicial, reduce empieza con el primer elemento como acumulador. Así se queda con el pedido mayor, comparando cada uno con el mejor hasta el momento.
`find()` devuelve el primer elemento que cumple la condición, o undefined si no hay ninguno, como con el pedido 999. `findIndex()` devuelve su posición en lugar del elemento.
`some()` responde si al menos uno cumple la condición y `every()`, si la cumplen todos. Los dos devuelven true o false y dejan de mirar en cuanto conocen la respuesta.
Código · main.js
const orders = [ { id: 101, customer: "Ana", total: 35.5, paid: true }, { id: 102, customer: "Luis", total: 120, paid: true }, { id: 103, customer: "Marta", total: 64.25, paid: false }, { id: 104, customer: "Ana", total: 18, paid: true },];// reduce combines all the elements into one value: here, a sum.const revenue = orders.reduce((sum, o) => sum + o.total, 0);console.log("Total of all orders:", revenue);// The starting value can be anything, such as an object to group.const perCustomer = orders.reduce((acc, o) => { acc[o.customer] = (acc[o.customer] || 0) + o.total; return acc;}, {});console.log("Per customer:", perCustomer);// Without a starting value, reduce begins with the first element.const biggest = orders.reduce((best, o) => (o.total > best.total ? o : best));console.log("Biggest order:", biggest.id, "by", biggest.customer);// find returns the FIRST element that matches (or undefined).const unpaid = orders.find((o) => !o.paid);console.log("First unpaid:", unpaid.id, unpaid.customer);console.log("Order 999:", orders.find((o) => o.id === 999));console.log("Position of 103:", orders.findIndex((o) => o.id === 103));// some: is there at least one? every: are all of them?console.log("Any order over 100?", orders.some((o) => o.total > 100));console.log("All paid?", orders.every((o) => o.paid));Salida · node main.js
Total of all orders: 237.75
Per customer: { Ana: 53.5, Luis: 120, Marta: 64.25 }
Biggest order: 102 by Luis
First unpaid: 103 Marta
Order 999: undefined
Position of 103: 2
Any order over 100? true
All paid? falsePara recordar
reduce((acc, x) => ..., inicial)reduce un array a un valor.- Con
{}como inicial,reducesirve para agrupar o contar. findda el primer elemento que coincide, oundefined.some: ¿alguno?;every: ¿todos?
Ejercicio
Con reduce, cuente cuántos pedidos hay pagados y sin pagar; con find, busque el primer pedido de Ana de más de 20 euros; con every, compruebe si todos superan los 10 euros.