在事件中在Array中设置布尔值

时间:2018-02-07 21:16:32

标签: javascript jquery arrays object

我有一个在点击事件中触发的功能。

基本上,我有两个元素,它们是一个名为chosenChar的数组中的对象。这两个对象都以名为isAttacker的布尔属性开头为假。

当"攻击"单击按钮,想法是随机选择数组中的一个对象,并将其isAttacker布尔值更改为true。此外,我们深入攻击该攻击者对象,从对象内的阵列中获取攻击,获取攻击值,然后将其打印到屏幕上。

我的目标是,如果我将攻击者布尔值设置为true,则原始数组中的剩余元素必须设置为false(因为它最初),我需要计算对防御对象(字符)造成的损害。

一切都是控制台记录" true"现在,它没有进入if语句,以确定是否有一名后卫并根据攻击计算角色的健康状况。

var attackChar = [];
var defendingChar = [];

// get a random character to attack
attackChar = chosenChar[Math.floor(Math.random()*chosenChar.length)];
var attackCharName = attackChar.name;
attackChar.isAttacker = true;
console.log("the attacker is " + attackChar.name + " and isAttacker is " + attackChar.isAttacker);

for (var i = 0; i < chosenChar.length; i++) {
    if(chosenChar[i].isAttacker === true) {
       console.log(chosenChar[i].name + " is the attacker");
    } else {
       console.log(chosenChar[i].name + " is not the attacker");
    }
}

enter image description here

1 个答案:

答案 0 :(得分:0)

一旦您选择了attackChar,就可以遍历所有字符,并为除了新攻击者之外的所有字符设置isAttacker标志为false。

attackChar = chosenChar[Math.floor(Math.random()*chosenChar.length)];
var attackCharName = attackChar.name;

// set isAttacker to true/false based on the attackChar
chosenChar.forEach(function(char) {
    char.isAttacker = char === attackChar;
});

for (var i = 0; i < chosenChar.length; i++) {
    if(chosenChar[i].isAttacker === true) {
       console.log(chosenChar[i].name + " is the attacker");
    } else {
       console.log(chosenChar[i].name + " is not the attacker");
    }
}

另一种方法是使用一个单独的值来保存攻击者,而不是更新每个字符的isAttacker值。

您实际上已经完成了此操作(chosenChar),因此isAttacker值在技术上是不必要的,但您可能会发现它比依赖浮动的单独变量更方便周围。

attackChar = chosenChar[Math.floor(Math.random()*chosenChar.length)];
for (var i = 0; i < chosenChar.length; i++) {
    if(chosenChar[i] === attachChar) {
       console.log(chosenChar[i].name + " is the attacker");
    } else {
       console.log(chosenChar[i].name + " is not the attacker");
    }
}