JavaScript for循环:跳过2个数字,然后再加上一组3
我做了一个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(跳过粗体数字) 以下是我的想法: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++
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);