Avatar billede jumping_jack Nybegynder
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??
Avatar billede jumping_jack Nybegynder
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]
Avatar billede jumping_jack Nybegynder
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]
Avatar billede roenving Novice
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 ...
Avatar billede jumping_jack Nybegynder
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?
Avatar billede roenving Novice
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"));
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester