JavaScript for循环:跳过2个数字,然后再加上一组3

JavaScript for循环:跳过2个数字,然后再加上一组3,javascript,for-loop,modulus,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++

我做了一个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]);
    }

vary=[1,2,3,4,5,6,7,8,9,10];
对于(变量i=0;i如果(y[i]>=4&&y[i]=9&&y[i]你可以保留一个计数器

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

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

    j++;
}
for(变量i=0,j=0;i3){
j=-1;
}
j++;
}

处理模式在5项之后重复,因此可以使用模运算符:

if (i % 5 < 3)
    document.write(y[i]);
if(i%5<3)
文件。填写(y[i]);
我的解决方案:

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;
    });
}
var-seq=[1,2,3,4,5,6,7,8,9,10],
选择=3,
skip=2;
var r=skipFilter(顺序、拾取、跳过);
控制台日志(r);
功能skipFilter(顺序、拾取、跳过)
{
var stride=拾取+跳过;
返回顺序过滤器(函数(ui){
返回i%步幅<拾取;
});
}
jsiddle:

for(var i=0;i”);
}
}
将“i”增量移动到“for”的主体

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

对于(var i=0;i在看到@ysf评论后,我必须向看到此答案的任何人解释我所做的事情-抱歉,如果存在糟糕的英语-

首先,你需要分析事情,我们想要什么?基于这一点,一切都会得到很好的解决

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

如果要选择2个数字并跳过3个数字,请选择2跳过3…以此类推) 我们首先对pick+skip值求和,使其位于mod操作的右侧……在我们的例子中,2+3=5

let all=pick+skip;

为了从数组中拾取,我不需要索引的值…我需要索引,它是自拾取索引[0]和索引[1]跳过索引2,3,4

因为我只想选取2,所以我们的表达式将仅限于2以及选取和跳过值的总和

[index]%all
因此,如果index mod all小于限制值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
i%all0%5<2=true
i%all1%5<2=true
i%all2%5<2=false
i%all3%5<2=false
i%all4%5<2=false
i%all5%5<2=true
i%all6%5<2=true
i%all7%5<2=false
i%all8%5<2=false
i%all9%5<2=false
i%all10%5<2=true
i%all11%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);
const skip=(arr,pick,skip)=>{
让全部=拾取+跳过;
let filtered=arr.filter((u,i)=>{
返回i%全部
为什么所有人都反对?这是对的。干得好,谢谢!@Matthew-我想有人没有得到它,但你不能真的用一个模来得到一组三,然后跳过两个等等。或者至少这太复杂了,保持一个计数器被重置是实现这一点的方法。@KarolyHorvath-然后发布一个answer@KarolyHorvath-如果你认为这很复杂,发布一个使用更简单的模的答案。很明显,如果
j
小于3,则从数组中写入,如果
j
大于3,则重置
j
重新开始。@adeneo:我不认为这很复杂。我说这是不必要的复杂。这是一个比较(比…)更复杂“我做了一个JavaScript循环,它跳过后面跟三个数字的每一组两个数字。”-你的代码做了一些完全不同的事情。请澄清,任务是什么?是的,不。这正是我所说的。显然不是,这就是我问的原因。我认为@KarolyHorvath所指的是你描述了一种迭代模式,但实现了一种基于值排除的模式。这就像说我发明了一种时间这台机器能让你在5分钟内准确地向前移动。只要进入机器,5分钟后出来,你就会在未来。技术上是正确的,但实际上并没有达到描述的要求。@Cookie Monster:这是一个令人印象深刻的类比。同样值得一提的是,在示例中跳过了9 10,尽管它们没有被b所遵循这是在批评阿迪内奥的?@David Thomas:老实说,这很简单。它确实比一个循环、两个检查和两个计数器更简单。@DavidThomas:更短,没有多余的变量——在我看来似乎是个赢家。好吧,至少你用模发布了一个答案,所以+1给你。但是,如果你不理解我的答案,认为这不是很明显,那么你会马上得到答案的e、 怪不得你花了十五分钟才弄明白这个问题。@zerkms-我真的不在乎,我发布了一个答案,上面的代码对我来说似乎很明显,但这个答案显然更好,因为它从社区获得了更多的赞成票,而我完全有效的答案却被否决了。至于可靠性,你的答案比我的好,还有这个在我看来,e很糟糕,但它很聪明,比你我的更聪明。实际上,我几乎不在乎,如果可以的话,我会删除我的答案和j
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
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);