• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] Wenn nicht assoziativ, dann Objekt, aber...

Maiskolben

New member
...da man keine Assoziativen Arrays in JS bauen kann, würde ich super gern wissen, wie ich mit normalen Objekten so umgehen kann, als wären es Arrays.. :) Ich poste mal ein Beispiel:

Ein Fragen/Antwort-Array für die Abfrage in einem Kontaktformular und die anschliessende Überprüfung:

Code:
  var fragen = {
   	'Wie ist die Farbe des Himmels?': 'blau',
   	'Die Erde ist eine Form, welche?': 'kugel',
   	'Ergebnis von 10 minus 2, plus 3..': '11',
  	'Sie kommen aus dem Leib ihrer...?': 'mutter',
   	'Der frühe Vogel fängt den...?': 'wurm',
  	'Was ist der Sinn des Lebens?': '42',
   	'Was atmen Sie?': 'luft',
   	'Wie ist die Farbe der Sonne?': 'gelb',
   	'Ein Flamingo ist ein?': 'vogel',
   	'In welcher Stadt stand ehemals die Mauer?': 'berlin',
   	'In welchem Land liegt Istanbul?': 'türkei',
  	'Woraus besteht eine Glasflasche?': 'glas',
  	'Wieviele Augen haben Menschen? (Zahl)': '2',
   	'Abkürzung für die Bundesrepublik?': 'brd',
  	'In welchem Land stehen die Pyramiden?': 'ägypten' 
   };

var count = 0; // init
for (var anzahl in fragen) { if (fragen.hasOwnProperty(i)) { ++count; } } 
var min = 0; var max = anzahl; //


Anscheinend hat das oben mit den "Keys" des Objektes nicht so hin. Frage: dürfen die Keys keine Strings sein?

Lg, Maiskolben
 
die Zeile habe ich vergessen hinzuzufügen: i war: //var i = shuffle(min,max); // Random zwischen min und max, da ich eigentlich die Fragen zufällig ausgeben lassen wollte (in PHP läuft das über array_keys(); und shuffle(min, max); ). :)
 
und wie berechnet man einen randomwert zw. 0 und 'Wie ist die Farbe des Himmels?'?
oder zw. 0 und 'Der frühe Vogel fängt den...?'?
 
Hey hesst,

meine Frage war: dürfen die Keys keine Strings sein?

Ich möchte gern die Keys dieses Arrays geshuffelt ausgeben, aber da JS keine Assoziativen Arrays verarbeiten kann, versuche ich es anders zu lösen, das gepostete ist bisher ein Versuch. Bitte antworte nicht auf meine Frage mit Gegenfragen... Lg, Maiskolben


PS: bisher zählt er mir die "Keys" ja korrekt, wie löst Du das mit Assoziativen Arrays in JavaScript? Wie würdest Du das hier handhaben?
 
Zuletzt bearbeitet:
Also ich täte das so lösen:
Code:
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>null</title>
  <script>
  function shuffle(array) {
    var counter = array.length, temp, index;
    // While there are elements in the array
    while (counter > 0) {
        // Pick a random index
        index = Math.floor(Math.random() * counter);
        // Decrease counter by 1
        counter--;
        // And swap the last element with it
        temp = array[counter];
        array[counter] = array[index];
        array[index] = temp;
    }

    return array;
}

function ObjektToArray(){ 
    var fragen = {
   	1: ['Wie ist die Farbe des Himmels?', 'blau'],
   	2: ['Die Erde ist eine Form, welche?', 'kugel'],
   	3: ['Ergebnis von 10 minus 2, plus 3..', '11'],
  	4: ['Sie kommen aus dem Leib ihrer...?', 'mutter'],
   	5: ['Der frühe Vogel fängt den...?', 'wurm'],
  	6: ['Was ist der Sinn des Lebens?', '42'],
   	7: ['Was atmen Sie?', 'luft'],
   	8: ['Wie ist die Farbe der Sonne?', 'gelb'],
   	9: ['Ein Flamingo ist ein?', 'vogel'],
   	10: ['In welcher Stadt stand ehemals die Mauer?', 'berlin'],
   	11: ['In welchem Land liegt Istanbul?', 'türkei'],
  	12: ['Woraus besteht eine Glasflasche?', 'glas'],
  	13: ['Wieviele Augen haben Menschen? (Zahl)', '2'],
   	14: ['Abkürzung für die Bundesrepublik?', 'brd'],
  	15: ['In welchem Land stehen die Pyramiden?', 'ägypten'] 
   };

var arr =[];
for( var i in fragen ) {
    if (fragen.hasOwnProperty(i)){
       arr.push(fragen[i]);
    }
}
//shuffle array
var array = shuffle(arr);

  for(var i=0;i<array.length;i++){
    for(var j=0;j<array[i].length;j++){  
    alert(array[i][j]);
  }
 }
}
 </script>
  </head>
  <body onload= ObjektToArray();>
  </body>
</html>
Man hätte auch gleich alles in ein Mehrdimensionales Array schreiben können, aber das wäre eher unschön. So ist es schön übersichtlich.

Hoffe ich konnte helfen.
MfG Xorg1990
 
Hallo!

@hesst: danke für Deine Antworten!

@xorg1990: Vielen lieben Dank! Nach einigem rumprobieren habe ich es nun in etwa so gelöst:

Die Funktion für den Shuffle habe ich bereits gefunden und sie nutze ich ebenso wie in Deinem Vorschlag! ;)
Code:
function shuffle(array) {
  var m = array.length, t, i;
  while (m) {
    // Pick a remaining element…
    i = Math.floor(Math.random() * m--);
    // And swap it with the current element.
    t = array[m];
    array[m] = array[i];
    array[i] = t;
  } return array;
}
  var fragen = [
   	{f: 'Wie ist die Farbe des Himmels?',                       a: 'blau'},
   	{f: 'Die Erde ist eine Form, welche?',                      a: 'kugel'},
   	{f: '10 minus zwei, plus 3...',                                a: '11'}
   ];
   shuffle(fragen);

Als nächstes lasse ich nun noch ein hidden-Field mit der Antwort als BASE64 decoded String mit übergeben und prüfe dann clientseitig ob die eingegebene Antwort mit der Antwort aus dem Array zusammenpasst. Erst dann geht es zum Server...

Code:
var richtigeantwort = document.getElementById("hiddenfield").value;
				var x = document.getElementById("antwortfeld").value;
				var gegebeneantwort = Base64.encode(x.toLowerCase());

					if (gegebeneantwort !== richtigeantwort) {
  				  document.getElementById('antwortfeld').style.background = "#f9ef9e";	
  				} else { // ... dann gehts los zum Server.

Danke euch für die Hinweise!

Lg, Maiskolben
 
Zuletzt bearbeitet:
Zurück
Oben