javascript - 需要一种优雅的方法来根据输入更改内联 if 语句的返回结果

标签 javascript arrays if-statement

为了更好地解释我想要做什么,我将在没有代码的情况下进行一些介绍,然后向您展示我在相关部分中使用的代码。

我目前正在使用一个函数来测量 Canvas 元素的宽度和高度,并将每个尺寸的一半除以输入的数字。然后,我使用 math.ceil()%2===0 来确定结果数字是否为偶数。使用这个公式,我将决定宽度是 bool 值 true 还是 false,并且高度是否相同。

最后我会得到

var A = True(或 False)

var B = True(或 False)

然后我创建了一个 3 维数组:

var pax = [];

for (var i = 0; i < stage.height()/12; i++){
    pax[i] = [];
    for (var j = 0; j < stage.width()/12; j++){
        pax[i][j] = [];
        pax[i][j].push("if statement here");
    };
}

我需要一种优雅的方式来用双 if 语句 where 之类的内容替换“if 语句”

if (A === B) { 
    (((i%2)===0)===((j%2)===0)) ? 0 : 180) 
    || 
    (((i%2)===0)!==((j%2)===0)) ? 180 : 0) 
} else { 
    (((i%2)===0)===((j%2)===0)) ? 180 : 0) 
    || 
    (((i%2)===0)!==((j%2)===0)) ? 0 : 180) 
};

我很确定我刚刚输入的这个怪物不会工作,所以我需要正确的方法来输入语法,并且需要更优雅和资源较少的方法来做到这一点,只是由于我将推送的索引位置的数量到数组中。

基本上我想做的是说“基于 Canvas 的高度和宽度,如果i是偶数,则返回0,如果i是奇数,返回180,或者根据 Canvas 的高度和宽度,如果i为偶数,则返回180,如果i为奇数,则返回0。

如果不清楚,我可以尝试再次解释。

最佳答案

您希望模数运算匹配或不匹配。使用 x % 2 时,只能有两个结果之一,因此使用 === 转换为 bool 值是没有意义的。而且括号太过分了。所有这些困惑都没有帮助。所以这是第一遍:

if (A === B) { 
    (i%2===j%2 ? 0 : 180) || (i%2!==j%2 ? 180 : 0) 
} else { 
    (i%2===j%2 ? 180 : 0) || (i%2!==j%2 ? 0 : 180) 
}
<小时/>

那么您似乎希望根据与 A === B 的比较来翻转数字。因此,如果它们相等并且甚至您需要 0, 180,或者如果它们不相等且奇数,您需要 180, 0。因此,基本上,如果 i/j 比较和 A/B 比较相同,则得到一个结果,否则得到另一个结果。

奇怪的是,当一个 % 测试成功但产生 0 时,|| 操作会使其尝试相反的 % 测试,这当然会失败。但由于第二次测试中的数字相反,因此我们最终得到了正确的值。只是你采取了迂回的方式。

<小时/>

最终,您的代码所做的就是这样:

(A === B) === (i%2===j%2) ? 0 : 180
<小时/>

这是一个演示,显示您的原始版本和简短版本达到了相同的结果。

演示: http://jsfiddle.net/jDWf6/3/

(编辑:更新了演示以显示所有测试的值。)

关于javascript - 需要一种优雅的方法来根据输入更改内联 if 语句的返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24522084/

相关文章:

javascript - 需要修改代码以排除数组中存在的所有值

javascript - Handlebars 助手的 Ember View 无法检测到自己何时被单击

javascript - 复选框 onclick 不会更改通过 jscript 检查

java - for 循环到达字符串末尾

javascript - 在javascript中的千金额后添加逗号

php - 如何访问此 XML 中的元素

c - 数组 “sum and/or sub” 到 `x` 吗?

C char数组,奇怪的字符

Matlab:可变步长 ODE 求解器中的 if 语句和 abs() 函数

c++ - 在 C/C++ 中检查 NULL 指针