Created
March 10, 2020 19:26
-
-
Save slipset/9e330e87222c6a02b2dd6fd3eea28ac5 to your computer and use it in GitHub Desktop.
litt om reduce
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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