我想做的只是返回指定范围内的每第三个奇数。
这对我来说有点奇怪,我尝试了一些不同的东西,但没有什么值得发布的,因为我的尝试没有产生接近我想要的结果,我有一种感觉,它超出了我当前能力的范围,任何帮助将不胜感激。预先感谢。
我会避免给你一个直接的代码答案。 (钓鱼>吃鱼)。
当您对具有相似因子的一组数字感兴趣时,一个好的经验法则是使用模运算符 (%)。 (我不知道这是否正式正确,但这就是我的想法)。
所以如果你想要所有偶数,你会这样做:
for (var i = 0; i < range; i++) {
if (i % 2 == 0) print i;
}
如果您只想要每秒偶数,您能看到如何为此添加一个计数器吗? 最后,您能看到如何更改此设置以便获得每第三个奇数吗?
您可以使用数组和过滤器:
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]
.filter(
function(a){
this.x += !!(a%2) ? 1 : 0;
return !!(a%3) && !!!(this.x%3);
}, {x:0});
//=> [5, 11, 17]
尝试:
<script>
var range = 100;
var j = -1;
for (i = 0; i <= range; i++) {
if (i % 2 == 1) {
j++;
if (j % 3 == 0) {
alert(i);
}
}
}
</script>
首先通过模 2 判断范围内的第一个数字是奇数还是偶数。
function getEveryThirdOdd(lowerBound, upperBound) {
var x = (lowerBound+1)%2;
var list = [];
var k = 0;
for(var i = lowerBound+x; i<=upperBound; i=i+6) {
list[k] = i;
k++;
}
return list;
}
此方法返回从 lowerBound 开始的每三个奇数(不是从零开始的每三个奇数)。如您所见,下层和上层都是包容性的。如果 lowerBound 是偶数,则与 2 的模运算将为零。这就是为什么我首先在 lowerBound 上加 1。使得(偶+1)=奇。奇数模 2 等于 1,因此从 lowerBound+1 开始:
for(var i = lowerBound+x; ...)