2016-08-06 5 views
1

Ich versuche, eine zufällige Namensauswahl aus einem Array von Namen aus localstorage zu machen, die scheint, dass der Fehler nicht auftaucht, wenn ich es mit Google Chrome inspiziere.Namen von localstorage in Array zu zufälliger Namensauswahl

Hier ist mein Code:

function getUserData() { 
    var Detail = localStorage.getItem("Detail"); 

    if (Detail == null) { 
     Detail = []; // on new computer, create the local storage item } else { 
     Detail = JSON.parse(Detail); // convert from string to array 
    } 

    for (var i = 0; i < Detail.length; i++) { // loop through the array 
     var row = document.getElementById("Detail").insertRow(-1); 
     var cell1 = row.insertCell(0); 
     var cell2 = row.insertCell(1); 
     var cell3 = row.insertCell(2); 
     var cell4 = row.insertCell(3); 
     var cell5 = row.insertCell(4); 
     cell1.innerHTML = Detail[i].name; 
     cell2.innerHTML = Detail[i].admin; 
     cell3.innerHTML = Detail[i].email; 
     cell4.innerHTML = Detail[i].contact; 
     cell5.innerHTML = Detail[i].country; 
    } 
} 

function NamePicker() { 
    var Detail = localStorage.getItem("Detail"); 

    if (Detail == null) { 
     Detail = []; // on new computer, create the local storage item 
    } else { 
     Detail = JSON.parse(Detail); // convert from string to array 
    } 

    // copy names 
    var nameArray = []; 

    for (var i = 0; i < Detail.length; i++) { // loop through the array 
     nameArray[i] = Detail[i].name; 
    } 

    for (var i = 0; i < Detail.length; i++) { // loop through the array 
     // get a number from random num generator %numArray.length 
     name = nameArray[num]; 

     while (nameArray.length < 11) { 
      var randomnumber = Math.max(Math.ceil(Math.random() * 11)) 
      var found = false; 
      for (var i = 0; i < nameArray.length; i++) { 
       if (name[i] == randomnumber) { 
        found = true; 
        break 
       } 
      } 
      if (!found) name[nameArray.length] = randomnumber; 
     } 

     // Display using modal 
     alert(name); 

     // remove using splice(num, 1); 
     name.splice(num, 1); 
     document.getElementById("Detail").innerHTML = name; 
    } 
} 

das Problem ist, dass es scheint, dass num wird den Namen aus der Liste und Alarm-Funktion nicht entfernen up nicht knallen ... ich schätze die Hilfe dank wirklich im voraus ...

+0

Die '} else {' im Kommentar in der ersten Funktion ist nur ein Tippfehler in der Frage? 'Detail = []; // ...} else {' – Andreas

+0

da Sie das name-Array in der zweiten for-Schleife durchlaufen, würde ich nameArray.length anstelle von Detail.length verwenden –

+0

Woher kam num genau? –

Antwort

1

Ich fand ein paar Probleme in Ihrer zweiten Funktion; Sie verwenden die lokale Variable i in drei for-Schleifen, und ich denke, in einer davon wollten Sie num verwenden. Außerdem habe ich Detail.length in nameArray.length in der zweiten for-Schleife geändert, da Sie den nameArray durchlaufen. Ich ändere auch die dritte für Schleife, um z anstelle von i zu verwenden.

function NamePicker() { 
var Detail = localStorage.getItem("Detail"); 

if (Detail == null) { 
    Detail = []; // on new computer, create the local storage item 
} else { 
    Detail = JSON.parse(Detail); // convert from string to array 
} 

// copy names 
var nameArray = []; 

for (var i = 0; i < Detail.length; i++) { // loop through the array 
    nameArray[i] = Detail[i].name; 
} 

for (var num = 0; num < nameArray.length; num++) { // loop through the array 
    // get a number from random num generator %numArray.length 
    name = nameArray[num]; 

    while (nameArray.length < 11) { 
     var randomnumber = Math.max(Math.ceil(Math.random() * 11)) 
     var found = false; 
     for (var z = 0; z < nameArray.length; z++) { 
      if (name[z] == randomnumber) { 
       found = true; 
       break 
      } 
     } 
     if (!found) name[nameArray.length] = randomnumber; 
    } 

    // Display using modal 
    alert(name); 

    // remove using splice(num, 1); 
    name.splice(num, 1); 
    document.getElementById("Detail").innerHTML = name; 
} 
} 

Hoffe, dass hilft!

+0

Ich habe den Code ausprobiert, den Sie mir gegeben haben. Es funktioniert, es gab keinen Fehler, wenn ich Element auf Google Chrome inspiziere. Aber meine Webseite reagierte nicht, wenn ich die Funktion verwendete ... –

+0

Ich denke, es könnte auch ein Problem mit der While-Schleife geben. Stellen Sie sicher, dass die Bedingung, die Sie geben, geschieht, andernfalls ist es eine Endlosschleife. Jetzt überprüfen Sie die nameArray.length <11, aber ich sehe nicht, dass Sie etwas hinzufügen, also bezweifle ich, dass diese Bedingung erfüllt wird. Oder vielleicht, was du meintest war name.length <11 –

+0

Der NameArray.length hat den Wert von Detail Wert Ich bin definitiv nicht mit name.length, weil das wird es auch eine Endlosschleife machen –