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 fra Novataris
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