Avatar billede moreless Nybegynder
28. august 2006 - 18:09 Der er 5 kommentarer og
1 løsning

sortering af array

hej

jeg håber i kan hjælpe med at sortetere dette array. jeg vil gerne kunne sortede det multidimensionelle array efter f.eks. fornavn eller efternavn.. osv

var myFriend = new Array();
myFriend[32] = new Array('Hans1', 'Hans', 'Hansen', 'male', 'Nordjylland', 3, 1);
myFriend[65] = new Array('Mikkel7', 'Mikkel', 'Andersen', 'male', 'Østjylland', 3, 1);
myFriend[40] = new Array('Claus4', 'Claus', 'Clausen', 'male', 'Østjylland', 1, 1);

/moreless
Avatar billede mclemens Nybegynder
28. august 2006 - 21:34 #1
Puha :D
... måske ?




<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

</head><body>
<script type="text/javascript">

sorts={"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9,"a":10,"b":11,"c":12,"d":13,"e":14,"f":15,"g":16,"h":17,"i":18,"j":19,"k":20,"l":21,"m":22,"n":23,"o":24,"p":25,"q":26,"r":27,"s":28,"t":29,"u":30,"v":31,"w":32,"x":33,"y":34,"z":35,"æ":36,"ø":37,"å":38}; // Beregning af tals værdi i række placering



function sorter_fornavn(a,b){

  var tala=talb=0;

  for(i=0,i2=a[1].length;i<i2;i++){
  tala+=sorts[a[1].charAt(i).toLowerCase()]/(40*i+1);
  }

  for(i=0,i2=b[1].length;i<i2;i++){
  talb+=sorts[b[1].charAt(i).toLowerCase()]/(40*i+1);
  }

  return tala-talb;

}





function sorter_efternavn(a,b){

  var tala=talb=0;

  for(i=0,i2=a[2].length;i<i2;i++){
  tala+=sorts[a[2].charAt(i).toLowerCase()]/(40*i+1);
  }

  for(i=0,i2=b[2].length;i<i2;i++){
  talb+=sorts[b[2].charAt(i).toLowerCase()]/(40*i+1);
  }

  return tala-talb;

}



function sorter_brugernavn(a,b){

  var tala=talb=0;

  for(i=0,i2=a[0].length;i<i2;i++){
  tala+=sorts[a[0].charAt(i).toLowerCase()]/(40*i+1);
  }

  for(i=0,i2=b[0].length;i<i2;i++){
  talb+=sorts[b[0].charAt(i).toLowerCase()]/(40*i+1);
  }

  return tala-talb;

}



var myFriend = new Array();
myFriend[32] = new Array('Hans1', 'Hans', 'Hansen', 'male', 'Nordjylland', 3, 1);
myFriend[65] = new Array('Mikkel7', 'Mikkel', 'Andersen', 'male', 'Østjylland', 3, 1);
myFriend[40] = new Array('Claus4', 'Claus', 'Clausen', 'male', 'Østjylland', 1, 1);



window.onload=function(){
  myFriend.sort(sorter_fornavn);
  test();
}

function test(){
  document.getElementById("test").firstChild.nodeValue=myFriend;
}

</script>

<div id="test">Resultat her</div>

<b onclick="myFriend.sort(sorter_fornavn);test();">Sorter efter fornavn</b><br><br>
<b onclick="myFriend.sort(sorter_efternavn);test();">Sorter efter fornavn</b><br><br>
<b onclick="myFriend.sort(sorter_brugernavn);test();">Sorter efter brugernavn</b>

</body></html>
Avatar billede mclemens Nybegynder
28. august 2006 - 21:39 #2
En lille rettelse:


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

</head><body>
<script type="text/javascript">

sorts={"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9,"a":10,"b":11,"c":12,"d":13,"e":14,"f":15,"g":16,"h":17,"i":18,"j":19,"k":20,"l":21,"m":22,"n":23,"o":24,"p":25,"q":26,"r":27,"s":28,"t":29,"u":30,"v":31,"w":32,"x":33,"y":34,"z":35,"æ":36,"ø":37,"å":38}; // Beregning af tals værdi i række placering



function sorter_fornavn(a,b){

  var tala=talb=0;

  for(i=0,i2=a[1].length;i<i2;i++){
  tala+=(tn=sorts[a[1].charAt(i).toLowerCase()]/(40*i+1))?tn:0;
  }

  for(i=0,i2=b[1].length;i<i2;i++){
  talb+=(tn=sorts[b[1].charAt(i).toLowerCase()]/(40*i+1))?tn:0;
  }

  return tala-talb;

}





function sorter_efternavn(a,b){

  var tala=talb=0;

  for(i=0,i2=a[2].length;i<i2;i++){
  tala+=(tn=sorts[a[2].charAt(i).toLowerCase()]/(40*i+1))?tn:0;
  }

  for(i=0,i2=b[2].length;i<i2;i++){
  talb+=(tn=sorts[b[2].charAt(i).toLowerCase()]/(40*i+1))?tn:0;
  }

  return tala-talb;

}



function sorter_brugernavn(a,b){

  var tala=talb=0;

  for(i=0,i2=a[0].length;i<i2;i++){
  tala+=(tn=sorts[a[0].charAt(i).toLowerCase()]/(40*i+1))?tn:0;
  }

  for(i=0,i2=b[0].length;i<i2;i++){
  talb+=(tn=sorts[b[0].charAt(i).toLowerCase()]/(40*i+1))?tn:0;
  }

  return tala-talb;

}



var myFriend = new Array();
myFriend[32] = new Array('Hans1', 'Hans', 'Hansen', 'male', 'Nordjylland', 3, 1);
myFriend[65] = new Array('Mikkel7', 'Mikkel', 'Andersen', 'male', 'Østjylland', 3, 1);
myFriend[40] = new Array('Claus4', 'Claus', 'Clausen', 'male', 'Østjylland', 1, 1);



window.onload=function(){
  myFriend.sort(sorter_fornavn);
  test();
}

function test(){
  document.getElementById("test").firstChild.nodeValue=myFriend;
}

</script>

<div id="test">Resultat her</div>

<b onclick="myFriend.sort(sorter_fornavn);test();">Sorter efter fornavn</b><br><br>
<b onclick="myFriend.sort(sorter_efternavn);test();">Sorter efter fornavn</b><br><br>
<b onclick="myFriend.sort(sorter_brugernavn);test();">Sorter efter brugernavn</b>

</body></html>
Avatar billede mclemens Nybegynder
28. august 2006 - 21:43 #3
tala+=sorts[a[1].charAt(i).toLowerCase()]/(40*i+1);
rettet til:
  tala+=(tn=sorts[a[1].charAt(i).toLowerCase()]/(40*i+1))?tn:0;
(hvis nu ikke der er en char værdi i sorts ...)

... bruger denne her /(40*i+1) ... da tegnet i næste tegn rækkefølge
har en lavere sorteringværdi end det laveste tegn i den tidligere ...

(men måske skal scriptet rettes lidt til så .,-_ også får en værdi defineret i sorts) ... men /(40*i+1) <- 40 i den linje skal altid være højere end den højeste værdi i sorts)
Avatar billede roenving Novice
31. august 2006 - 10:39 #4
>>mclemens

-- prøv at kigge nærmere på ecma-script implementeringen af .sort() ...

F.eks. sorter efter fornavn:

function sort_navn(a,b){
  var tmp1 = a[1]+a[2], tmp2 = b[1]+b[2];//Hvis fornavn er ens, må efternavn tilføjes
  return tmp1>tmp2?1:tmp1==tmp2?0:-1;
}

alert(myFriend.sort(sort_navn)[0][1]);
Avatar billede moreless Nybegynder
31. august 2006 - 14:17 #5
tak for hjælpen mclemens, det virker, har dog kogt koden ned til et par linjer, men nu forstår jeg bedre sortering i javascipt.

roenving, dit eksempel er meget godt, sad nemlig lige og overvejede hvordan jeg skulle sortere efter mere end 1 kriterie.
Avatar billede mclemens Nybegynder
31. august 2006 - 15:02 #6
Takker for point :o)

... Og tak for tippet - det var en hel del
hurtigere end det skidt jeg legede med :D
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