JavaScript
map, filter og find
map, filter og find er de tre array-metoder, du bruger mest. De tager en funktion med ind og kører den på hvert element: map laver en ny liste af ændrede værdier, filter en ny liste med dem, der opfylder et krav, og find det første element, der passer.
Forudsætter, at du har set arrays , funktioner i javascript .
En funktion som ingrediens
De her metoder gør noget, der virker mærkeligt første gang: du giver en funktion med som argument. Metoden kalder så din funktion én gang for hvert element.
const tal = [1, 2, 3, 4];
const fordoblet = tal.map(function (t) {
return t * 2;
});
console.log(fordoblet);
console.log(tal); Output
Tryk på “Kør koden”.
Læg mærke til, at det oprindelige array er uændret. map laver et nyt array.
Det er en pointe, der går igen: de her metoder ændrer ikke listen, de laver en ny.
Med en arrow function bliver det kortere, og det er den form, du vil se overalt:
const tal = [1, 2, 3, 4];
console.log(tal.map((t) => t * 2)); Output
Tryk på “Kør koden”.
Når en arrow function kun består af ét udtryk, kan du droppe krølleparenteserne og
return. Værdien bliver returneret automatisk.
map: lav hvert element om
map giver altid et array af samme længde som det oprindelige.
const studerende = [
{ navn: "Ida", karakter: 10 },
{ navn: "Omar", karakter: 7 },
{ navn: "Sofie", karakter: 4 }
];
const navne = studerende.map((s) => s.navn);
console.log(navne); Output
Tryk på “Kør koden”.
Det er den typiske måde at trække ét felt ud af en liste objekter, for eksempel lige inden data skal vises på en side.
filter: behold nogle af dem
filter giver et array, der er kortere eller lige så langt. Din funktion skal
returnere true for dem, der skal med.
const studerende = [
{ navn: "Ida", karakter: 10 },
{ navn: "Omar", karakter: 7 },
{ navn: "Sofie", karakter: 4 }
];
const bedste = studerende.filter((s) => s.karakter >= 7);
console.log(bedste.map((s) => s.navn)); Output
Tryk på “Kør koden”.
De to kan altså sættes sammen: først filtrér, så map. Det læses fra venstre mod højre som en sætning: “tag dem med karakter over 7, og giv mig deres navne”.
find: kun den første
const studerende = [
{ navn: "Ida", karakter: 10 },
{ navn: "Omar", karakter: 7 }
];
const fundet = studerende.find((s) => s.navn === "Omar");
console.log(fundet);
const ikkeFundet = studerende.find((s) => s.navn === "Karl");
console.log(ikkeFundet); Output
Tryk på “Kør koden”.
Finder den ingen, får du undefined. Derfor ser du så ofte et tjek lige efter:
if (fundet) { … }.
reduce: læg det hele sammen til én værdi
reduce er den sværeste af dem, og den, der oftest bliver spurgt til. Den samler
hele listen til én værdi.
const priser = [120, 45, 300];
const total = priser.reduce((sum, pris) => sum + pris, 0);
console.log(total); Output
Tryk på “Kør koden”.
sum er det, der er samlet indtil nu, pris er det aktuelle element, og 0
til sidst er startværdien. Første gennemløb er sum altså 0 og pris 120.
Hvornår vælger du hvad?
| Du vil… | Brug |
|---|---|
| lave alle elementer om | map |
| beholde nogle af dem | filter |
| finde ét bestemt | find |
| tjekke om mindst ét passer | some |
| tjekke om alle passer | every |
| lægge sammen til én værdi | reduce |
| bare gøre noget for hver | forEach |
Alt det her kan også skrives med en almindelig for-løkke, og i starten er det
helt fint at gøre det. Metoderne er kortere at læse, når man er vant til dem, og
de fortæller læseren, hvad hensigten er, i stedet for bare hvordan det gøres.
Kort opsamling
- Alle tre tager en funktion, der kaldes for hvert element.
mapgiver samme længde,filterkortere,findét element ellerundefined.- Ingen af dem ændrer det oprindelige array.
forEachgiver ingen værdi tilbage.
Øv dig
Læs videre
- Arrays Arrays i JavaScript forklaret på dansk: opret en liste, hent et element, tilføj og fjern, og løb den igennem med en løkke. Med eksempler du kan køre.
- Funktioner i JavaScript Funktioner i JavaScript forklaret på dansk: parametre, return og kald. Med eksempler du kan køre, og forklaringen på hvorfor din funktion giver undefined.
- Objekter Objekter i JavaScript forklaret på dansk: nøgler og værdier, punktnotation, indlejrede objekter og arrays af objekter. Med eksempler du kan køre.
Senest gennemgået .