2016-06-04 11 views
0

Ich bin ein sehr neuer Programmierer, und ich bin nicht an Dinge komplexer als ein paar wenn andere Anweisungen oder einige leichte DOM Traversing.Vergleich zweier Objekte mit sich selbst und einander

Mit Hilfe von stackoverflow habe ich einen Test für eine RPG-Website erstellt.

14 Fragen testen die Benutzer "Bedenken" als Spieler in einem Dungeon und Drachen wie Einstellung, und vergeben Punkte zu 1 von 8 Persönlichkeitstypen.

Jeder der 8 Typen sind die Eigenschaften von zwei Objekten. PrimaryResults und secondaryResults. Jede der 8 Eigenschaften hat denselben Namen. Defender (def), Berserker (ber), Mönch (mnk) usw. (Sie werden es im Code sehen)

Der Punkt ist, um Ergebnisse wie Def/Def oder Ber/Def oder Mnk/erhalten zu können Def gibt es 8x8 Kombinationen oder 64 Ergebnisse.

dann hängt ein div mit einer Klasse von Ergebnissen die tatsächlichen HTML-Ergebnisse an den Bildschirm für den Benutzer basierend auf den Endnoten des Tests an.

Mein Problem:

ich eine Zeile Code benötigen, der den höchsten Wert durch jede Eigenschaft der beiden Objekte und findet geht, ich versuche, dass in einer IF-Anweisung zu setzen, die die richtigen Ergebnisse in Anhängen führt zu der Benutzer.

Aktualisiert Versuch auf 6/5 ---

verwendet Azamantes' Code-Vorschlag finde ich, dass ich, was die Ergebnisse von DEF/DEF erhalte nach wie vor unabhängig von den tatsächlichen Werte der einzelnen Variablen sind.

Ich habe einen Screenshot von dem, was die console.log mir über die Werte erzählt, was das Display bringt.

Aus irgendeinem Grund, wenn die Code-Zyklen über

Wenn ph = def und sh = seine auf jeden Fall wieder als wahr kommen.

In dem Bild umkreiste ich ein mögliches Problem, ich weiß nicht, ich bin kein Experte.

könnte es etwas damit zu tun haben, wie es 0 für Ber auf der Oberseite sagt und hat die Punktzahl für ber wenn geklickt? (siehe Bild)

oder könnte es etwas mit den Werten der Objekte selbst zu tun haben? Gehen die Werte irgendwo in der Übersetzung verloren?

$(window).load(function() { 
$(".intro").appendTo('#display_box'); 
var question = $(".question"); 
var questionPosition = -1; 
var results =$(".results"); 





var secondaryResults = { 
    def:0, 
    ber:0, 
    mnk:0, 
    rng:0, 
    cle:0, 
    thf:0, 
    mge:0, 
    dru:0, 
}; 

var primaryResults = { 
    def:0, 
    ber:0, 
    mnk:0, 
    rng:0, 
    cle:0, 
    thf:0, 
    mge:0, 
    dru:0, 
}; 







let pH = 'def', sH = 'def'; 

Object.keys(primaryResults).map(key => { 
if(primaryResults[key] > primaryResults[pH]) { 
    pH = key; 
} 
if(secondaryResults[key] > secondaryResults[pH]) { 
    sH = key; 
} 
}); 

const highestPrimary = primaryResults[pH]; 
const highestSecondary = secondaryResults[sH]; 

$("#submit").on('click', function(){ 

    console.log(primaryResults); 
    console.log(secondaryResults); 

    if (pH == 'def' && sH == 'def') { 
     clearBox(); 
     results.eq(0).fadeIn(500).appendTo('#display_box'); 
    }; 

    if (pH == 'def' && sH == 'ber') { 
     clearBox(); 
     results.eq(1).fadeIn(500).appendTo('#display_box'); 
    }; 

    if (pH == 'def' && sH == 'mnk') { 
     clearBox(); 
     results.eq(2).fadeIn(500).appendTo('#display_box'); 
    }; 

     if (pH == 'def' && sH == 'rng') { 
     clearBox(); 
     results.eq(3).fadeIn(500).appendTo('#display_box'); 
    }; 

    if (pH == 'def' && sH == 'thf') { 
     clearBox(); 
     results.eq(4).fadeIn(500).appendTo('#display_box'); 
    }; 

    if (pH == 'def' && sH == 'cle') { 
     clearBox(); 
     results.eq(5).fadeIn(500).appendTo('#display_box'); 
    }; 

    if (pH == 'def' && sH == 'dru') { 
     clearBox(); 
     results.eq(6).fadeIn(500).appendTo('#display_box'); 
    }; 

    if (pH == 'def' && sH == 'mge') { 
     clearBox(); 
     results.eq(7).fadeIn(500).appendTo('#display_box'); 
    }; 






}) 







function clearBox(){ 
    $("#display_box").children().fadeOut(500).appendTo('#question_holding'); 
}; 



function cycle(){ 

    question.eq(questionPosition).fadeIn(500).appendTo("#display_box"); 
    $("#display_box").animate({scrollTop:0}, 500); 


} 








    $('#leftarrow').on('click', function(){ 
    questionPosition--; 
    if (questionPosition <= -1) {questionPosition = 13}; 
    clearBox(); 
    cycle(); 





}); 





$('#rightarrow').on('click', function(){ 
    questionPosition++; 
    if (questionPosition > 13) { questionPosition = 0}; 
    clearBox(); 
    cycle(); 

    if($('input[name^="answer"]:checked').length > 13) { 
     $("#submit").css('display', 'block'); 
    } 




}); 

$('#submit').on('click', function() { 
$('input[name^= "answer"]:checked').each(function(){ 
     if ($(this).val() == "monkL"){ 
      secondaryResults.mnk += 1.02; 

     } 

     if ($(this).val() == "berserkerL"){ 
      secondaryResults.ber += .99; 

     } 

     if ($(this).val() == "defenderL"){ 
      secondaryResults.def += 1.01; 

     } 

     if ($(this).val() == "thiefL"){ 
      secondaryResults.thf += 1; 

     } 

     if ($(this).val() == "mageL"){ 
      secondaryResults.mge += .98; 

     } 

     if ($(this).val() == "clericL"){ 
      secondaryResults.cle += 1.03; 

     } 

     if ($(this).val() == "rangeL"){ 
      secondaryResults.rng += .97; 

     } 

     if ($(this).val() == "druidL"){ 
      secondaryResults.dru += 1.05; 

     } 



     }) 



    }); 


$('#submit').on('click', function() { 
$('input[name^= "answer"]:checked').each(function(){ 
     if ($(this).val() == "monkM"){ 
      secondaryResults.mnk += 1.31; 

     } 

     if ($(this).val() == "berserkerM"){ 
      secondaryResults.ber += 1.29; 

     } 

     if ($(this).val() == "defenderM"){ 
      secondaryResults.def += 1.3; 

     } 

     if ($(this).val() == "thiefM"){ 
      secondaryResults.thf += 1.28; 

     } 

     if ($(this).val() == "mageM"){ 
      secondaryResults.mge += 1.27; 

     } 

     if ($(this).val() == "cleric"){ 
      secondaryResults.cle += 1.32; 

     } 

     if ($(this).val() == "rangeM"){ 
      secondaryResults.rng += 1.33; 

     } 

     if ($(this).val() == "druidM"){ 
      secondaryResults.dru += 1.26; 

     } 



     }) 



    }); 

$('#submit').on('click', function() { 
$('input[name^= "answer"]:checked').each(function(){ 
     if ($(this).val() == "monkH"){ 
      secondaryResults.mnk += 1.5; 

     } 

     if ($(this).val() == "berserkerH"){ 
      secondaryResults.ber += 1.51; 

     } 

     if ($(this).val() == "defenderH"){ 
      secondaryResults.def += 1.52 ; 

     } 

     if ($(this).val() == "thiefH"){ 
      secondaryResults.thf += 1.49; 

     } 

     if ($(this).val() == "mageH"){ 
      secondaryResults.mge += 1.48; 

     } 

     if ($(this).val() == "clericH"){ 
      secondaryResults.cle += 1.47; 

     } 

     if ($(this).val() == "rangeH"){ 
      secondaryResults.rng += 1.53; 

     } 

     if ($(this).val() == "druidH"){ 
      secondaryResults.dru += 1.51; 

     } 



     }) 



    }); 

$('#submit').on('click', function() { 
$('input[name^= "answer"]:checked').each(function(){ 
     if ($(this).val() == "monkPL"){ 
      primaryResults.mnk += .96; 

     } 

     if ($(this).val() == "berserkerPL"){ 
      primaryResults.ber += .97; 

     } 

     if ($(this).val() == "defenderPL"){ 
      primaryResults.def += .98; 

     } 

     if ($(this).val() == "thiefPL"){ 
      primaryResults.thf += .99; 

     } 

     if ($(this).val() == "magePL"){ 
      primaryResults.mge += 1; 

     } 

     if ($(this).val() == "clericPL"){ 
      primaryResults.cle += 1.01; 

     } 

     if ($(this).val() == "rangePL"){ 
      primaryResults.rng += 1.02; 

     } 

     if ($(this).val() == "druidPL"){ 
      primaryResults.dru += 1.03; 

     } 



     }) 



    }); 



$('#submit').on('click', function() { 
$('input[name^= "answer"]:checked').each(function(){ 
     if ($(this).val() == "monkP"){ 
      primaryResults.mnk += 1.3; 

     } 

     if ($(this).val() == "berserkerPM"){ 
      primaryResults.ber += 1.26; 

     } 

     if ($(this).val() == "defenderPM"){ 
      primaryResults.def += 1.27; 

     } 

     if ($(this).val() == "thiefPM"){ 
      primaryResults.thf += 1.28; 

     } 

     if ($(this).val() == "magePM"){ 
      primaryResults.mge += 1.29; 

     } 

     if ($(this).val() == "clericPM"){ 
      primaryResults.cle += 1.31; 

     } 

     if ($(this).val() == "rangePM"){ 
      primaryResults.rng += 1.32; 

     } 

     if ($(this).val() == "druidPM"){ 
      primaryResults.dru += 1.33; 

     } 


     }) 


    }); 

$('#submit').on('click', function() { 
$('input[name^= "answer"]:checked').each(function(){ 
     if ($(this).val() == "monkPH"){ 
      primaryResults.mnk += 1.46; 

     } 

     if ($(this).val() == "berserkerPH"){ 
      primaryResults.ber += 1.47; 

     } 

     if ($(this).val() == "defenderPH"){ 
      primaryResults.def += 1.48 ; 

     } 

     if ($(this).val() == "thiefPH"){ 
      secondaryResults.thf += 1.49; 

     } 

     if ($(this).val() == "magePH"){ 
      primaryResults.mge += 1.5; 

     } 

     if ($(this).val() == "clericPH"){ 
      primaryResults.cle += 1.51; 

     } 

     if ($(this).val() == "rangePH"){ 
      primaryResults.rng += 1.52; 

     } 

     if ($(this).val() == "druidPH"){ 
      primaryResults.dru += 1.536172; 

     } 



     $("#submit").css('display','none'); 
     }) 


    }); 




















}); 

Screen cap of results

+0

Was meinen Sie mit "der höchste Wert"?Dass beide Objekte denselben Wert haben und dieser Wert höher ist als alle anderen Werte? Oder: Eines der Objekte hat einen höheren Wert als das andere (im selben Schlüssel) und gleichzeitig höher als alle anderen Werte von sich selbst (unabhängig davon, ob das andere Objekt im angegebenen Schlüssel den gleichen "höchsten Wert" hat) ? – Azamantes

+0

Sorry, Ich meine, ich möchte die Eigenschaft mit dem höchsten Wert in jedem Objekt. So ist Primary kommt Def und Secondary kommt Mnk dann die Ergebnisse die richtige div anhängen, die in diesem Fall wäre def/mnk –

+0

So möchten Sie den höchsten Wert von 'PRIMARY' und den höchsten Wert aus 'sekundär' und diese Werte müssen nicht in beiden Objekten vom selben Schlüssel sein? Ich meine, es kann "secondary.def" (die höchste in sekundären) und zum Beispiel "primary.ber" (die höchste in primären) sein? – Azamantes

Antwort

0

Wenn ich Sie verstanden, das ist, was Sie brauchen:

let primaryResults = { 
    def: 0, ber: 5, mnk: 99999, 
    rng: 0, cle: 1, thf: 1, 
    mge: 0, dru: 1, 
}; 
let secondaryResults = { 
    def: 1, ber: 0, mnk: 0, 
    rng: 1, cle: 33333333, thf: 0, 
    mge: 1, dru: 0, 
}; 

let pH = 'def', sH = 'def'; 
let highestPrimary, highestSecondary; 

Object.keys(primaryResults).map(key => { 
    if(primaryResults[key] > primaryResults[pH]) { 
     pH = key; 
    } 
    if(secondaryResults[key] > secondaryResults[sH]) { 
     sH = key; 
    } 
}); 

highestPrimary = primaryResults[pH]; 
highestSecondary = secondaryResults[sH]; 

pH - Schlüssel in primaryResults mit dem höchsten Wert
sH - Schlüssel in resultsResults mit dem höchsten Wert
highestPrimary - der höchste Wert in primaryResults
highestSecondar y - der höchste Wert in secondaryResults

+0

Vielen Dank @Azamantes kann ich fragen, warum ph = 'def' Im Probaby Missverständnis würde nicht das den höchsten Wert der Primär zu def festlegen? und deshalb würden die Ergebnisse immer als def kommen? –

+0

Ich setze es einfach auf einen beliebigen Schlüssel, der zufällig 'def' ist, weil wir den Wert gegen den primären [pH] überprüfen. Wenn du [pH] nicht auf irgendwas einstellst, wird es "undefined" zurückgeben, das weder höher noch niedriger als irgendeine Zahl ist. – Azamantes

+0

Ich habe den Code mit Ihrer Lösung aktualisiert. Ich habe versucht, zu fragen, ob highestprimary = def und highestSecondary = def dann das erste Element in dem Index .RESULT anhängen Es ist nichts passiert, keine Ergebnisse, keine Fehlermeldung, ich 100% sicher, sollte der höchste Wert am def haben in Sowohl die primären als auch die sekundären Ergebnisse –

Verwandte Themen