Map
Fetch
JavaScript
Børre Stenseth

Map

Hva

Map er en nyttig måte å ordne data på. Map er implementert som en prototype for arrays. Sjekk hos MDN [1] .

Se også modulen Ass Array ;

På disse sidene finner du noen veldig enkle eksempler som på ingen måte går inn i alle mulighetene. Eksemplene er heller ikke nødvendigvis optimale for å løse de angitte oppgavene. Se på dem som eksempler på koding.

Eksemplel 1

Dette er et minimalistisk eksempel. Vi etablerer en Map med følgende programlinjer:

personer1=new Map([
               ["Jensen",{adresse:"Storgt 2"}],
               ["Olsen",{adresse:"Hjemveien 4"}]
               ]);

Altså en index tabell med index-verdier ,keys, Jensen og Olsen. Til hver key er det knyttet en value. I dette tilfellet adressen. Vi skal se neden for at innholdet i value kan være mer komplisert, og fleksibelt.Vi lager en enkel funksjon for å vise innholdet:

	dump1
	

Koden er slik:

function show1(){
   var dump1=document.getElementById("dump1");
   dump1.innerHTML="";
   personer1.forEach(function(value,key)
      {
         dump1.innerHTML+=key+" bor i "+value.adresse+"\n";
      })
}

Eksempel 2

Her utvider vi fleksibiliteten i de objektene som indeksere. Vi etablerer en Map med følgende programlinjer:

var personer2=new Map([
               ["Jensen",{adresse:"Storgt 2",tlf:"12345"}],
               ["Olsen",{adresse:"Hjemveien 4"}],
               ["Andersen",{adresse:"FuruLia 2",epost:"af@p.com"}]
               ]);

	dump2
	

Koden er slik:

function show2(){
   var dump2=document.getElementById("dump2");
   dump2.innerHTML="";
   var lines=[];
   personer2.forEach(function(value,key)
      {
         T=key+","+value.adresse;
         if(value.epost)
            T+=",epost:"+value.epost;
         if(value.tlf)
            T+=",tlf:"+value.tlf;
         lines.push(T);
      })
      lines.sort();
      for(var i=0; i< lines.length; i++)
         dump2.innerHTML+=lines[i]+"\n";
}

Eksempel 3

Her utvider vi fleksibiliteten i de objektene som indeksere. Vi etablerer en Map med følgende programlinjer:

var personer3=new Map([
               ["Jensen",
                  {adresse:"Storgt 2",tlf:72725,
                   biler:[{type:"Ford",regnr:"AE127"}]}],
               ["Olsen",
                  {adresse:"Hjemveien 4",
                   biler:[{type:"Ford",regnr:"AE523"},
                         {type:"VWGolf",regnr:"AE981"}]}],
               ["Andersen",
                  {adresse:"FuruLia 2",epost:"af@p.com"}]
               ]);

	dump3
	

Koden er slik:

function show3(){
   var dump3=document.getElementById("dump3");
   dump3.innerHTML="";
   var lines=[];
   personer3.forEach(function(value,key)
      {
         T=key+"\n\t"+value.adresse;
         if(value.epost)
            T+=",epost:"+value.epost;
         if(value.tlf)
            T+=",tlf:"+value.tlf;
         if(value.biler){
            T+="\n\t";
            for(var i=0; i<value.biler.length;i++ )
               T+=value.biler[i].type+"("+value.biler[i].regnr+")  ";               
         }
         lines.push(T);
      })
      lines.sort();
      for(var i=0; i< lines.length; i++)
         dump3.innerHTML+=lines[i]+"\n";
}

Eksempel 4

Her henter vi dataene fra fil ved hjelp av fetch når vi etablerer Map-objektet. Du finner en bra introduksjon hos MDN [2] , og du finner eksempler på Fetch-sidene i dette materialet, Fetch

Dataene er plassert i en json-fil. Du kan se den i nettleseren her: personer4.json.

	dump4
	

To funksoner er invovert:

fetch-funksjonaliteten:

function getData(){
    fetch("personer4.json", {cache: "no-cache"})
    .then(function(response) {
        if(response.ok)
            return response.json();
        throw(response.statusText);
        })
    
    .then(function(myJson) {        
        personer4 =new Map(myJson);
        show4();
    })
    .catch(function(err) {
         alert("data er ikke lastet \n"+err);
      });    
}

og selve utskriften ( som er lik eksempel 3)

function show4(){
   var dump4=document.getElementById("dump4");
   dump4.innerHTML="";
   var lines=[];
   personer4.forEach(function(value,key)
      {
         T=key+"\n\t"+value.adresse;
         if(value.epost)
            T+=",epost:"+value.epost;
         if(value.tlf)
            T+=",tlf:"+value.tlf;
         if(value.biler){
            T+="\n\t";
            for(var i=0; i<value.biler.length;i++ )
               T+=value.biler[i].type+"("+value.biler[i].regnr+")  ";               
         }
         lines.push(T);
      })
      lines.sort();
      for(var i=0; i< lines.length; i++)
         dump4.innerHTML+=lines[i]+"\n";
}