Avatar billede bearhugx Nybegynder
20. november 2003 - 12:34 Der er 18 kommentarer og
1 løsning

Brug for et HashMap / Dictionary i Javascript

Hejsa eksperter...

Jeg leder efter noget Javascript (ikke Java) kode, som giver mig mulighed for at have en collection af objekter, som både kan tilgås via en key (Key-Value), samt kan itereres over ( for(i=0; i<col.size(); ++i) )

Findes der sådant et objekt i Javascript - eller skal man selv til at lave et "utillity-objekt" --- i så fald - er der en som har et sådant liggende ???

/Søren
Avatar billede erikjacobsen Ekspert
20. november 2003 - 12:35 #1
Du kan bruge et array:

a["peter"] = "Hansen";
Avatar billede roenving Novice
20. november 2003 - 12:37 #2
-- og så kan du jo:

for(i=0; i<a.length; i++)
Avatar billede bearhugx Nybegynder
20. november 2003 - 12:38 #3
f.eks. så vil jeg gerne kunne gøre følgede

col.add("x", objx);
col.add("y", objy);
col.add("z", objz);

col.size() --> 3

col[1] --> objy    //evt. lavet som col.get(1)
col["z"] --> objz  //evt. lavet som col.get("z")

altså både kunne slå op via index og via kay
Avatar billede erikjacobsen Ekspert
20. november 2003 - 12:39 #4
Nej, roenving. Mere i retning af:

var a=new Array();
var u;


a["Peter"] = "Hansen";
a["Kurt"] = "Petersen";

for (u in a) {
  alert(u+" "+a[u]);
}
Avatar billede bearhugx Nybegynder
20. november 2003 - 12:41 #5
problemet er bare at .length == 0 når man indsætter via col["peter"]...

følgende kode udskriver et stort fedt 0
<html><head>
<script language="JavaScript">
    var myDict = Array();
    myDict["one"] = "1";
    myDict["two"] = "2";
    myDict["tree"] = "3";
</script>
</head>

<body>
    <script>document.write(myDict.length);</script>
</body>
</html>
Avatar billede roenving Novice
20. november 2003 - 12:48 #6
>>erik

D'r zq rigtigt ...

-- den krølle har ole også tidligere gjort opmærksom på, men jeg har ikke selv haft brug for arrays på den led, så lidt rusten er jeg !-)

-- egentlig også en besynderlig ting, at arrays med hash-index åbenbart klassificeres mere som en slags objekter ...
Avatar billede bearhugx Nybegynder
20. november 2003 - 12:50 #7
he he Erik -- du er simpelthen min redningsmand i skysovs ... dit
for( key in collection ) {
  value = collection[key];
}

er simpelthen super!!!

Juhuuu!!

læg et svar

PS: er man altid garanteret at keys kommer ud i samme rækkefølge, som de er blevet indsat i collectionen ????
Avatar billede erikjacobsen Ekspert
20. november 2003 - 13:01 #8
Det tror jeg ikke du skal regne med.
Avatar billede bearhugx Nybegynder
20. november 2003 - 13:05 #9
ok... - i mit lille eksempler har jeg ni key-value par - og hvergang kommer de ud i den rigtige rækkefølge...  works for me....
Avatar billede bearhugx Nybegynder
20. november 2003 - 13:09 #10
jeg skal ikke regne med... >> at du lægger et svar *LOL* eller at de kommer ud i samme rækkefølge ....
Avatar billede roenving Novice
20. november 2003 - 13:10 #11
Prøv f.eks. denne -- og lav associationen om fra '4' til f.eks. 'p'

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Sorter links</title>
<meta name="keywords" content="roenving;http://www.eksperten.dk/spm/429950">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="javascript" type="text/javascript">
var arr = new Array();
arr['1'] = ["http://www.msdn.microsoft.com","Microsoft Developers Network"];
arr['2'] = ["http://www.ebruger.dk","e-bruger"];
arr['3'] = ["http://www.ofir.dk","Ofir"];
arr['4'] = ["http://www.eksperten.dk","Eksperten"];
arr['5'] = ["http://www.jubii.dk","Jubii"];
arr['6'] = ["http://www.mocrosoft.com","M$"];
arr['7'] = ["http://www.google.dk","Google"];
//arr.sort();
function skrivLinks(){
txt = "";
for(u in arr){
    txt += "<a href='" + arr[u][0] + "'>" + arr[u][1] + "</a><br>"
}
document.getElementById('minDiv').innerHTML = txt;
}
function fjernLink(){
    delete arr['4'];
    arr['4'] = ["http://www.eksperten.dk","Ægsperten"];
    skrivLinks();
}
</script>
</head>
<body onload="skrivLinks()">
<div id="minDiv" style="color:red;font-size:10px;font-family:sans-serif;"></div>
<button onclick="fjernLink();">fjern link</button>
</body>
</html>
Avatar billede bearhugx Nybegynder
20. november 2003 - 13:18 #12
ved dit ekspempel bliver linksne udskrevet i samme rækkefølge, som de bliver introduceret i collectionen ... hvis man bruger delete arr[p] og derefter indsætter en ny værdi med nøgle "p" så vil den nye værdi stadig være på "p"'s plads

udtoget fra collectionen bliver ikke f.eks. sorterert efter key el.lign.
Avatar billede roenving Novice
20. november 2003 - 13:21 #13
Nej, det var præcis det, du skulle se !-)
Avatar billede bearhugx Nybegynder
20. november 2003 - 13:28 #14
takker roenving for hans eksempel :-)
Avatar billede roenving Novice
20. november 2003 - 13:39 #15
;O)
Avatar billede bearhugx Nybegynder
25. november 2003 - 14:19 #16
roenving og EJ ... lægger i ikke lige et svar, så jeg kan lukke ?
Avatar billede erikjacobsen Ekspert
25. november 2003 - 14:22 #17
Jeg tror forsat ikke på at de nødvendigvis kommer i den rækkefølge de
bliver sat ind. Det kan både afhænge af størrelse, browser, og version.
Men du kan da godt få et svar
Avatar billede roenving Novice
25. november 2003 - 14:27 #18
-- og det må vel være eriks points her !-)
Avatar billede bearhugx Nybegynder
25. november 2003 - 14:29 #19
roenving >> ok .. - du får nok også points omlidt - er igang med at afteste din setInterval-kode

Erik >> Værsågod ...
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