-1

我知道我可以这样做...

if (Size == 4 | Size == 7 | Size == 10 | Size == 13 | Size == 16 | Size == 19)
{alert("Yes!")}

但是有更好的编码吗?

4

10 回答 10

10
if(Size%3==1&&Size<20&&Size>3 )
{alert("yes");}
于 2012-07-06T09:47:27.320 回答
8

您可以使用jQuery.inArray

if (jQuery.inArray(Size, [4, 7, 10, 13, 16, 19])>=0) {

请注意,目标只能是可读性,而不是性能。

如果您只有这 6 个值并且它们永远不会改变,那么if您制作的丑陋(使用|| 而不是|)是一个完全正确的解决方案。

于 2012-07-06T09:47:07.207 回答
5
switch (Size) {
    case 4:
    case 7:
    case 10:
    case 13:
    case 16:
    case 19:
        alert("Yes!");
}
于 2012-07-06T09:46:59.113 回答
2
if((Size - 1)%3 == 0)
     alert("Yes!");
于 2012-07-06T09:48:02.373 回答
2

您可以使用模数

if (((Size - 1) % 3) == 0) {
  alert ("yess!");
}
于 2012-07-06T09:48:07.800 回答
1

您可以将这些数字放在一个数组中,然后使用

if(JQuery.inArray(Size, [4, 7, 10, 13, 16, 19])>=0)

http://api.jquery.com/jQuery.inArray/

但这只会使代码看起来“更好”,它不会影响 scipt 的性能。

于 2012-07-06T09:48:03.593 回答
1

像这样的东西(使用jQuery):

var accepted = [4,7,10,13,16,19];

if ($.inArray(Size, accepted) != -1)
{
  ...
}
于 2012-07-06T09:48:16.620 回答
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');
}
于 2012-07-06T09:48:23.490 回答
1
if((Size - 1)%3 == 0 && Size>=4 && Size<=19) alert("Yes!");
于 2012-07-06T10:06:21.203 回答
0

该集合{ 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!");
}
于 2012-07-15T00:51:25.827 回答