为了更好地解释我想要做什么,我将在没有代码的情况下进行一些介绍,然后向您展示我在相关部分中使用的代码。
我目前正在使用一个函数来测量 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/