2009-08-18 10 views
1

Quelqu'un a fait un script de comparaison pour moi, mais il fonctionne comme il se doit, parce que je n'étais pas très clair, le code ne fait pas totalement comment j'aime l'avoir.javascript comparez le tableau

S'il vous plaît jeter un oeil à ce site, cela vous expliquera plus de mille mots

La fonction de ce site vérifie les numéros de loto/bingo, chaque tirage jour (1 et 2) doit être comparé à tous les les gens qui jouent. Certains nombres sont verts, mais tous les nombres ne sont pas verts, ils devraient être verts car ils correspondent à certains nombres de la liste des joueurs. Encore une fois, c'était ma faute parce que je n'étais pas assez clair. Quelqu'un peut-il me dire quelle partie doit être remplacée ou éditée pour qu'elle vérifie tous les nombres dans la variable DRAW à la place elle ne vérifie que la dernière variable ajoutée DRAW?

http://www.coldcharlie.nl/lotto/

Ceci est la partie de la fonction.

function checkArray(guesses, draw) { 
    var results = {} 
    for (var i = 0; i< guesses.length; ++i) { 
     if (draw.picks[guesses[i]]) { 
      results[guesses[i]] = 'win'; 
     } else { 
      results[guesses[i]] = 'loss'; 
     } 
    } 
    return results; 
} 

function appendTo(elt, parent) { 
    if (parent) { 
     document.getElementById(parent).appendChild(elt); 
    } else { 
     document.body.appendChild(elt); 
    } 
} 

function printResults(name, winloss, parent) { 
    var resultElt = document.createElement('div'); 
    resultElt.appendChild(document.createElement('span')); 
    resultElt.firstChild.appendChild(document.createTextNode(name)); 
    resultElt.firstChild.className='name'; 
    var picks = document.createElement('ol'); 
    picks.className='picks'; 
    for (var p in winloss) { 
     picks.appendChild(document.createElement('li')); 
     picks.lastChild.appendChild(document.createTextNode(p)); 
     picks.lastChild.className = winloss[p]; 
    } 
    resultElt.appendChild(picks); 
    appendTo(resultElt, parent); 
} 

function printResultsFor(name, draw, parent) { 
    printResults(name, checkArray(players[name], draw), parent); 
} 

function printDraw(which, draw, parent) { 
    var drawElt = document.createElement('div'); 
    drawElt.className='draw'; 
    drawElt.appendChild(document.createElement('h3')); 
    drawElt.lastChild.appendChild(document.createTextNode('Draw '+which)); 
    drawElt.lastChild.className='drawNum'; 
    drawElt.appendChild(document.createElement('div')); 
    drawElt.lastChild.className='date'; 
    drawElt.lastChild.appendChild(document.createTextNode(draw.when)); 
    var picks = document.createElement('ol'); 
    picks.className='picks'; 
    for (var p in draw.picks) { 
     picks.appendChild(document.createElement('li')); 
     picks.lastChild.appendChild(document.createTextNode(p)); 
    } 
    drawElt.appendChild(picks); 
    appendTo(drawElt, parent); 
} 

Ceci est la partie HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
    <head> 
    <style type="text/css"> 
     body { 
     font-family: Verdana, Arial, Helvetica, sans-serif; 
     color: white; 
     background-color: #333; 
     } 
     .name { 
     color: white; 
     font-weight: bold; 
     margin-right: 0.5em; 
     } 
     .picks, .picks * { 
     display: inline; 
     margin: 0; 
     padding: 0; 
     list-style-type: none; 
     } 
     .picks * { 
     margin: auto 0.25em; 
     } 
     .win { color: lime; } 
     .loss { color: red; } 
     .drawNum, #Draws H3 { 
      margin-bottom: 0; 
     } 
    </style> 
    <script type="text/javascript" src="lotto.js"></script> 
    </head> 
    <body> 
    <div id="Results"></div> 
    <div id="Draws"></div> 
    <script type="text/javascript"> 
    var players = {John: ["2","3","8","12","23", "37", "41", "45", "48"], 
        Michael: ["2","14","3","12","24", "37", "41", "46", "48"]}; 

    var draws = [ {when: 'Sat 08-08-2009', 
        picks:{2:1, 5:1, 11:1, 16:1, 23:1, 45:1, 46:1}}, 
        {when: 'Sat 15-08-2009', 
        picks:{1:1, 23:1, 11:1, 14:1, 23:1, 42:1, 46:1}}]; 
    draws.last = draws[draws.length-1]; 

    for (name in players) { 
     printResultsFor(name, draws.last, 'Results'); 
    } 
    for (var i=0; i<draws.length; ++i) { 
     printDraw(i+1, draws[i]); 
    } 
    </script> 
    </body> 
</html> 
+0

dup possible de http://stackoverflow.com/questions/1282528/compare-array-in-javascript –

Répondre

2

j'ai une autre suggestion:

  1. utilisation jquery
  2. générer le code HTML de telle sorte que chaque numéro de joueurs aura une durée d'un classe qui contient ce nombre. par exemple, 37 sera écrit <span class='pick37'>37</span>
  3. se débarrasser de la logique de tableau fou, juste une boucle pour définir les couleurs de toutes les classes qui coïncident avec les numéros gagnants à vert.

modifier: J'ai examiné votre problème. qui jamais est venu avec cette mise en œuvre n'aurait pas pu le rendre plus compliqué. Je voulais essayer de résoudre votre problème, mais il n'y a pas de bonne raison d'essayer de travailler avec ce code quand une réécriture serait plus facile/plus rapide.

Y a-t-il une raison pour que ce code soit tel qu'il est?

Edit2: j'étais dans une bonne humeur si je ne le récrire: également disponible ici: http://dogself.com/test.htm

J'espère que vous apprenez quelque chose de cela.

<html> 
<head> 
<title>Bingo stuff</title> 
<body> 
<style type="text/css"> 
     body { 
     font-family: Verdana, Arial, Helvetica, sans-serif; 
     color: white; 
     background-color: #333; 
     } 
     .name { 
     color: white; 
     font-weight: bold; 
     margin-right: 0.5em; 
     } 
     .picks, .picks * { 
     display: inline; 
     margin: 0; 
     padding: 0; 
     list-style-type: none; 
     } 
     .picks * { 
     margin: auto 0.25em; 
     } 
     .win { color: lime; } 
     .loss { color: red; } 
     .drawNum, #Draws H3 { 
      margin-bottom: 0; 
     } 
    </style> 
<script type="text/javascript" src="http://jquery.com/src/jquery-latest.js"></script> 
<div id="players"></div> 
<div id="draws"></div> 

<script type="text/javascript"> 
var players = { 
       Joop : ["6","8","16","18","26","28","32","36","38","41"], 
       Marijke: ["7","10","14","18","24","29","30","34","39","40"], 
       Michel : ["4","5","11","16","21","27","33","36","42","44"], 
       Mario : ["6","9","18","25","32","35","39","40","43","45"], 
       Diana : ["2","6","8","17","22","23","33","36","42","44"], 
       Agnes : ["3","5","10","15","26","29","32","37","41","44"], 
       Chris : ["5","7","8","9","11","12","16","28","30","32"], 
       Jeannette: ["1","2","4","7","8","11","13","28","30","32"], 
       Wieger: ["1","2","3","7","10","13","14","22","23","27"], 
       Anita: ["6","13","15","17","21","26","32","33","43","45"], 
       Thea: ["1","3","5","7","10","17","19","20","22","38"], 
       Danny: ["3","7","11","15","22","28","32","37","40","43"], 
       Cindy: ["2","4","16","18","21","24","33","38","41","44"], 
       Hanneke: ["1","3","4","12","18","21","25","30","36","40"], 
       Willem: ["3","9","17","21","27","33","35","39","41","42"] 

       }; 

var draws = [ { 
       when: 'Sat 08-08-2009', 
       picks:[2, 5, 11, 16, 23, 45, 46] 
       }, 
       { 
       when: 'Sat 15-08-2009', 
       picks:[1, 23, 11, 14, 23, 42, 46] 
       } 
      ]; 

var buildPlayers = function(){ 
    var cont = $("#players"); 
    for(player in players){ 
     var html = ["<div>","<span class='name'>"+player+"</span>", "<ol class='picks'>"]; 
     for(var i = 0; i < players[player].length; i++){ 
      html.push("<li class='loss pick_"+players[player][i]+"'>"+players[player][i]+"</li>"); 
     } 
     html.push("</ol>","</div>"); 
     cont.append(html.join("")); 
    } 
}; 

var buildDraws = function(){ 
    var cont = $("#draws"); 
    for(var i = 0; i < draws.length; i++){ 
     var html = ["<div class='draw'>","<h3 class='drawNum'>Draw "+(i+1)+"</h3>","<div class='date'>"+draws[i].when+"</div>","<ol class='picks'>"]; 
     for(var j = 0; j < draws[i].picks.length; j++){ 
      html.push("<li>"+draws[i].picks[j]+"</li>"); 
      showWin(draws[i].picks[j]); 
     } 
     html.push("</ol>","</div>"); 
     cont.append(html.join("")); 
    } 
}; 

var showWin = function(winNum){ 
    $(".pick_"+winNum).removeClass("loss").addClass("win"); 
}; 

$(function(){ 
    buildPlayers(); 
    buildDraws(); 
}); 

</script> 
</body> 
</html> 
+0

Comme je l'ai dit, quelqu'un a fait ce code pour moi, maintenant j'ai un code qui ne fonctionne pas pour moi et je suis si proche: D. Peut/Voulez-vous le réécrire? Je me bats depuis des semaines maintenant et chaque fois que je me rapproche un peu, mais pas là :) – Chris

+0

voir la solution ci-dessus – mkoryak

+0

@mkoryak Grande aide, après des semaines de douleur enfin là! Merci beaucoup! @ Outis, merci pour tout le travail avant la réécriture! – Chris