我知道我可以这样做...
if (Size == 4 | Size == 7 | Size == 10 | Size == 13 | Size == 16 | Size == 19)
{alert("Yes!")}
但是有更好的编码吗?
我知道我可以这样做...
if (Size == 4 | Size == 7 | Size == 10 | Size == 13 | Size == 16 | Size == 19)
{alert("Yes!")}
但是有更好的编码吗?
if(Size%3==1&&Size<20&&Size>3 )
{alert("yes");}
您可以使用jQuery.inArray:
if (jQuery.inArray(Size, [4, 7, 10, 13, 16, 19])>=0) {
请注意,目标只能是可读性,而不是性能。
如果您只有这 6 个值并且它们永远不会改变,那么if
您制作的丑陋(使用||
而不是|
)是一个完全正确的解决方案。
switch (Size) {
case 4:
case 7:
case 10:
case 13:
case 16:
case 19:
alert("Yes!");
}
if((Size - 1)%3 == 0)
alert("Yes!");
您可以使用模数
if (((Size - 1) % 3) == 0) {
alert ("yess!");
}
您可以将这些数字放在一个数组中,然后使用
if(JQuery.inArray(Size, [4, 7, 10, 13, 16, 19])>=0)
http://api.jquery.com/jQuery.inArray/
但这只会使代码看起来“更好”,它不会影响 scipt 的性能。
像这样的东西(使用jQuery):
var accepted = [4,7,10,13,16,19];
if ($.inArray(Size, accepted) != -1)
{
...
}
在jQuery中
var arr = [4,7,10,13,16,19];
if($.inArray(Size , arr)>-1) {
alert("Yes!")
}
香草js
var arr = [4,7,10,13,16,19];
if(arr.indexOf(Size)>-1)
{
alert('yes');
}
if((Size - 1)%3 == 0 && Size>=4 && Size<=19) alert("Yes!");
该集合{ 4, 7, 10, 13, ... }
也可以描述为{ x | ∃ k ∈ ℕ⁺ : x = 3 k + 1 }
,可以重新排列为{ x | ∃ k ∈ ℕ⁺ : k = (x - 1) / 3 }
。
所以你只需要检查是否(Size - 1) / 3
是一个正整数。或者,换一种说法,如果Size - 1
是正数并且是 3 的倍数:
(0 < Size - 1) && ((Size - 1) % 3 === 0)
但同样,每个子表达式都可以在不改变其含义的情况下重新排列,方法是在两边都加 1:
(1 < Size) && (Size % 3 === 1)
因为符合这个表达式的第一个数字是Size === 4
,我们甚至可以用1 < Size
代替4 <= Size
。这使得代码更清晰、更高效。
因此,在其最终形式中,代码可以这样编写:
if (4 <= Size && Size % 3 === 1) {
alert("Yes!");
}