JavaScript for循环:跳过2个数字后跟一组3

时间:2014-07-07 00:20:29

标签: javascript for-loop modulus

我制作了一个JavaScript循环,跳过每组两个数字,然后是一组三个。

考虑以下整数集:

1,2,3,4,5,6,7,8,9,10

这是数组返回的内容:

1,2,3,6,7,8

看看它如何跳过4-5和9-10? (每组两个数字后跟一组三个)

视觉:

1,2,3, 4 5 ,6,7,8, 9 10 (跳过粗体数字)

以下是我提出的建议:

var y = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

    for (var i = 0; i < y.length; i++) {
        if (y[i] >= 4 && y[i] <= 5) {
            continue;
        }
        if (y[i] >= 9 && y[i] <= 10) {
            continue;
        }
        document.write(y[i]);
    }

上述for循环从123678返回12345678910。问题是我必须手动说出哪些要跳过。有没有办法,可能有%模数,自动跳过每个两个数字的集合,然后是一组三个而不将长度限制为10?

6 个答案:

答案 0 :(得分:5)

处理模式在5个项目后重复,所以是的,您可以使用模运算符:

if (i % 5 < 3)
    document.write(y[i]);

答案 1 :(得分:2)

在看到@ysf评论后,我必须解释我为看到此答案的任何人所做的事情-如果存在不良英语,则抱歉-

首先您需要分析事物,我们想要什么?在此基础上,一切都会很好解决

所以我们有一个数组,您想选择数字并跳过其他内容吗?为了实现这一点,并知道我们将使用mod运算符“%”

如果我们要选择2个数字并跳过3个数字,请选择2个跳过3个……等等) 我们首先将pick + skip值相加,以使其位于mod操作的右边...在我们的情况下为2 + 3 = 5

let all = pick + skip;

为了从数组中进行选择,我不需要索引的值...我需要它自定义的索引index [0]和index [1]跳过索引2,3,4

因为我只想选择2个,所以我们的表达式将被限制为2个,并且选择和跳过值的总和

[index] % all < pick,因此,如果所有索引mod均小于2的限制,则将其取为其他值(跳过)

因此循环的结果将如下所示:

i % all < pick ===> 0 % 5 < 2 = true
i % all < pick ===> 1 % 5 < 2 = true
i % all < pick ===> 2 % 5 < 2 = false
i % all < pick ===> 3 % 5 < 2 = false
i % all < pick ===> 4 % 5 < 2 = false
i % all < pick ===> 5 % 5 < 2 = true
i % all < pick ===> 6 % 5 < 2 = true
i % all < pick ===> 7 % 5 < 2 = false
i % all < pick ===> 8 % 5 < 2 = false
i % all < pick ===> 9 % 5 < 2 = false
i % all < pick ===> 10 % 5 < 2 = true
i % all < pick ===> 11 % 5 < 2 = true

最后我们使用过滤器,因为这是一个返回数组的JS函数

const skip = (arr, pick, skip) => {
  let all = pick + skip;
  let filtered = arr.filter((_, i) => {
    return i % all < pick;
  });
  console.log(filtered);
};

}

skip([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],2,3);

答案 2 :(得分:1)

我的解决方案:

var seq = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    pick = 3,
    skip = 2;

var r = skipFilter(seq, pick, skip);
console.log(r);

function skipFilter(seq, pick, skip)
{
    var stride = pick + skip;

    return seq.filter(function(_, i) {
        return i % stride < pick;
    });
}

JSFiddle:http://jsfiddle.net/BwyLY/

答案 3 :(得分:0)

你可以保留一个计数器

for (var i=0, j=0; i < y.length; i++) {

    if (j < 3) {
        document.write(y[i]);
    } else if ( j > 3) {
        j = -1;
    }

    j++;
}

FIDDLE

答案 4 :(得分:0)

for (var i=0; i < y.length; i++) {

  if (i % 5 < 3) {
    document.write(y[i] + ' ');
  } else {
    i += 1;
    document.write('<br>');
  }
}

答案 5 :(得分:0)

移动&#34; i&#34; &#34;&#34;

增加到&#34;的主体
self.layer.contents = UIImage(named: "freshBackground.png")?.CGImage