Joachim: assoziatives array per zufall sortieren

Hi,

ich moechte ein assoziatives Array zufallssortieren (die keys) und aergere mich, dass ich einen Umweg ueber ein indiziertes Array gehen muss. Hat einer von Euch mal was eleganteres gebastelt? Hier mein Versuch:
<html>
<head>
<script language="JavaScript1.2" type="text/javascript">
function randComp() {
 return (Math.random() - Math.random());
}
myNumbers = new Array();
myNumbers["lala1"] = 1;
myNumbers["lala2"] = 2;
myNumbers["lala3"] = 3;
myNumbers["lala4"] = 4;
function shuffle() {
    var temp1 =  new Array();
    var temp2 =  new Array();
    for(i in myNumbers) temp1[temp1.length] =  i;
    temp1.sort(randComp);
    for(var j = 0; j < temp1.length; j++) temp2[temp1[j]] =  myNumbers[temp1[j]];
    var out =  "";
    for(i in temp2) out += i + "->" + temp2[i] + " - ";
    document.spiel.ausgabe.value =  out;
}
</script>
</head>
<body bgcolor="#FFFFFF">
<form name="spiel">
 <input name="ausgabe" type="text" value="Zufallsreihenfolge" size="53" maxlength="53">
 <input name="button" type="button" value="go" onClick="shuffle()">
</form>
</body>
</html>

Gruesse  Joachim

  1. ich moechte ein assoziatives Array zufallssortieren (die keys) und aergere mich, dass ich einen Umweg ueber ein indiziertes Array gehen muss. Hat einer von Euch mal was eleganteres gebastelt? Hier mein Versuch:

    Nein, das wird nicht gehen. Das Problem ist, das JS nicht wirklich assoziative Arrays kennt. Die keys sind Eigenschaften, des Objektes, aber keine Indizes. D.h. du solltest dir angewöhnen zu schreiben:

    myNumbers = new Object();
    myNumbers["lala1"] = 1;
    myNumbers["lala2"] = 2;
    myNumbers["lala3"] = 3;
    myNumbers["lala4"] = 4;

    Denn damit wird klarer, das myNemubers eben kein Array ist und deshalb auch nicht sortierbar mit den üblichen Methoden.

    Struppi.

    1. Hi,

      myNumbers = new Object();

      ja, das ist eigentlich ein guter Hinweis... in Java sind das afaik auch Hash-Tables und keine Arrays...

      Danke & Gruesse  Joachim