Skip to content

Instantly share code, notes, and snippets.

@slipset
Created March 10, 2020 19:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save slipset/9e330e87222c6a02b2dd6fd3eea28ac5 to your computer and use it in GitHub Desktop.
Save slipset/9e330e87222c6a02b2dd6fd3eea28ac5 to your computer and use it in GitHub Desktop.
litt om reduce
// så vi har et array med tall, og vi skal legge de sammen.
const numbers = [1, 2, 4, 10];
// den måten man kanskje lærer først, som vi gikk gjennom på tavla er noe sånt:
let summedNums = 0;
for (i = 0; i< numbers.length; i++) {
summedNums = summedNums + numbers[i];
}
// Hvis vi ser på denne løsningen, så er det veldig mye styr for å få til det vi skal ha gjort.
// Essensen i dette er jo summedNums = summedNums + numbers[i];, men det blir liksom borte.
// så hva om vi klarte å "trylle" bort alt det omkringliggende?
// la oss skrive det om:
let accumulator = 0;
for (i = 0; i< numbers.length; i++) {
const currentValue = numbers[i];
accumulator = acumulator + currentValue;
}
// så kan vi gjøre noe sånn som
function pluss(tall1, tall2) {
return tall1 + tall2;
}
// da kan vi skrive om til
let accumulator = 0;
for (i = 0; i< numbers.length; i++) {
const currentValue = numbers[i];
accumulator = pluss(accumulator, currentValue);
}
// og hvis vi nå gjør dette om til en funksjon:
function summerAlleTallene(numbers) {
let accumulator = 0;
for (i = 0; i< numbers.length; i++) {
const currentValue = numbers[i];
accumulator = pluss(accumulator, currentValue);
}
}
// så, siden vi kan sende funksjoner som paramtre, så kan vi skrive om funksjonen over til noe som ligner på reduce:
function minReduce(numbers, f) {
let accumulator = 0;
for (i = 0; i< numbers.length; i++) {
const currentValue = numbers[i];
accumulator = f(accumulator, currentValue);
}
}
// og vi kan kalle den med
minReduce(numbers, pluss);
// Nå har vi en ganske generel og fin funksjon som vi skulle kunne bruke til flere ting
function product(tall1, tall2) {
return tall1 * tall2;
}
minReduce(numbers, product) // dette virker ikke fordi vi initialiserer accumulator til å være null.
// Derfor må vi skrive om minReduce til følgende
function minReduce(numbers, f, init) {
let accumulator = init;
for (i = 0; i< numbers.length; i++) {
const currentValue = numbers[i];
accumulator = f(accumulator, currentValue);
}
}
// nå har den blitt generell og vi kan skrive
minReduce(numbers, pluss, 0);
// og
minReduce(numbers, product, 1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment