比较同一对象和不同对象的属性

时间:2016-06-03 21:47:10

标签: javascript jquery

我为rpg网站创建了一个多项选择测试。

测试有14个问题。

这些问题和答案中有一半在名为primaryResults的对象的8个属性中的1个内添加数值。

后半部分完全相同,但将数据存储在名为secondaryResults的对象中。

现在我需要一种比较这两个对象的所有属性的方法,以便将正确的结果附加到用户。

例如

如果PrimaryResults.def>而不是主要的其他属性。

如果secondaryResults.def>比其他的二级属性。

然后追加与def / def对应的div来显示。

是否有比

更有效的方法

如果primaryResults.def> primaryResults.ber&& PrimaryResults.mnk&& primaryResults.rng

等等 编辑:已添加代码

$(".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,
};



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"){
            secondaryResults.mnk += .96;

        }

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

        }

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

        }

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

        }

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

        }

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

        }

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

        }

        if ($(this).val() == "druidPL"){
            secondaryResults.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');
        })


    });



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

if (Object.keys(primary).every(function(key) {
return key == 'def' || primary.def > primary[key];
})) {
$(results.eq(0)).appendTo$("#display_box");
}
});

}); 




}); 

1 个答案:

答案 0 :(得分:1)

您可以使用Array.prototype.every函数测试对象中的每个属性。

&#13;
&#13;
var primary = {
  A: 100,
  B: 5,
  C: 6,
  D: 15,
  E: 30
};

if (Object.keys(primary).every(function(key) {
  return key == 'A' || primary.A > primary[key];
})) {
  console.log("Success!");
}
&#13;
&#13;
&#13;

Object.keys(primary)返回一个包含primary中所有属性名称的数组,即["A", "B", "C", ...]

every()然后在该数组的每个元素上调用该函数;如果所有调用都返回true,则返回true,否则返回false

然后,对于每个给定的密钥,该函数检查primary.A是否大于primary[key]。测试key == 'A'使其无法尝试将primary.A与自身进行比较,因此它会有效地忽略对象中的该属性。