01. november 2006 - 17:32
Der er
5 kommentarer
Sortering af et 2 dimensonelt array
Hej. Jeg har lavet dette: [kode] var arr = new Array(); arr[0] = new Array(10, "Index"); arr[1] = new Array(150, "Produkter"); arr[2] = new Array(250, "Kontakt"); arr[3] = new Array(125, "Andet"); [/kode] Hvis jeg så kører igennem dette, og får den til at vise teksten efter rækkefølge vil det se sådan her ud: Index Produkter Kontakt Andet Det er så meningen at jeg vil have den til at sortere array'et, så array'et kommer til at se sådan her ud: (10, "Index") (125, "Andet") (150, "Produkter") (250, "Kontakt") hvis i altså kan følge hvad jeg mener. og er dette muligt på en eller anden måde??
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
01. november 2006 - 18:05
#1
Hurra jeg fik det til at virke Gjorde bare sådan her: [kode] var arr = new Array(); arr[0] = {Pos:10, Tekst:"Index"}; arr[1] = {Pos:150, Tekst:"Produkter"}; arr[2] = {Pos:250, Tekst:"Kontakt"}; arr[3] = {Pos:125, Tekst:"Andet"}; [/kode] når jeg så udskrev array'et gjorde jeg sådan her: [kode] function sortByPos(a, b){ var x = a.Pos; var y = b.Pos; return ((x < y) ? -1 : ((x > y) ? 1 : 0)); } document.getElementById('output').innerHTML += arr.sort(sortByPos()).[0]; document.getElementById('output').innerHTML += arr.sort(sortByPos()).[1]; document.getElementById('output').innerHTML += arr.sort(sortByPos()).[2]; document.getElementById('output').innerHTML += arr.sort(sortByPos()).[3]; og så virker det. Så er der nogen der har noget i mod at jeg tager point selv??? [kode]
01. november 2006 - 18:07
#2
Undskyld, manglede lige noget, så skriver kode stumpen igen: [kode] function sortByPos(a, b){ var x = a.Pos; var y = b.Pos; return ((x < y) ? -1 : ((x > y) ? 1 : 0)); } document.getElementById('output').innerHTML += arr.sort(sortByPos()).[0].Pos."<br>"; document.getElementById('output').innerHTML += arr.sort(sortByPos()).[0].Tekst."<br>"; document.getElementById('output').innerHTML += arr.sort(sortByPos()).[1].Pos."<br>"; document.getElementById('output').innerHTML += arr.sort(sortByPos()).[1].Tekst."<br>"; document.getElementById('output').innerHTML += arr.sort(sortByPos()).[2].Pos."<br>"; document.getElementById('output').innerHTML += arr.sort(sortByPos()).[2].Tekst."<br>"; document.getElementById('output').innerHTML += arr.sort(sortByPos()).[3].Pos."<br>"; document.getElementById('output').innerHTML += arr.sort(sortByPos()).[3].Tekst."<br>"; [kode]
02. november 2006 - 18:25
#3
-- men det er uhensigtsmæssigt at køre sorteringen en masse gange, så gør bare: function sortByPos(a, b){ var x = a.Pos; var y = b.Pos; return ((x < y) ? -1 : ((x > y) ? 1 : 0)); } arr.sort(sortByPos); document.getElementById('output').innerHTML += arr[0].Pos + "<br>"; document.getElementById('output').innerHTML += arr[0].Tekst + "<br>"; ... -- bemærk også en del overflødige punktummer !-) I øvrigt er innerHTML ikke kompatibel med de nyere udgaver af html, og har aldrig indgået i en standard for binding mellem javascript og html ...
03. november 2006 - 09:11
#4
ja sådan kunne jeg jo egentlig godt gøre. Så spare man da også nogle bytes i størrelse. :) Men angående det med ikke at bruge innerHTML, hvad synes du så jeg skal bruge? Er det bedre hvis jeg bruger createElement?
03. november 2006 - 15:54
#5
Hvis det skal være fremtidssikret, ja !-) -- og så bliver det noget i stil med: function sortByPos(a, b){ var x = a.Pos; var y = b.Pos; return ((x < y) ? -1 : ((x > y) ? 1 : 0)); } arr.sort(sortByPos); var elm = document.getElementById('output'); for(i=0,im=arr.length;im>i;i++){ elm.appendChild(document.createTextNode(arr[i].Pos)); elm.appendChild(document.createElement("br")); elm.appendChild(document.createTextNode(arr[i].Tekst)); elm.appendChild(document.createElement("br")); }
Vi tilbyder markedets bedste kurser inden for webudvikling