Javascript 具有不对称增量的循环
我在这里尝试做的是让函数有一个循环,它将不对称地增加一个数字,并在每次迭代中返回它Javascript 具有不对称增量的循环,javascript,Javascript,我在这里尝试做的是让函数有一个循环,它将不对称地增加一个数字,并在每次迭代中返回它 我从11开始 我会增加2得到13 增加4得到17 增加2得到19 增加2得到21 增加2得到23 增加4 递增的模式是循环的,并随着时间的推移而重复:2、4、2、2、2、4、2、2、2、2、4、2、2、2、2、2、2、4、2、2、2、4,依此类推 我一直在考虑for和while循环、生成器函数或Array.prototype.reduce,但似乎无法找到解决问题的简单方法 我还没有想出一个好的出发点,我应该如
- 我从11开始
- 我会增加2得到13
- 增加4得到17
- 增加2得到19
- 增加2得到21
- 增加2得到23
- 增加4
2、4、2、2、2、4、2、2、2、2、4、2、2、2、2、2、2、4、2、2、2、4
,依此类推
我一直在考虑for和while循环、生成器函数或Array.prototype.reduce,但似乎无法找到解决问题的简单方法
我还没有想出一个好的出发点,我应该如何继续。。。
下面是一个我希望它如何将值推送到数组的示例,但它们也可以由函数返回
function returnNums(maxValue) {
let returnedNums = [];
for (let i = 11; i <= maxValue;) {
returnedNums.push(i);
// magical solution to increment i following my desired pattern right here
}
}
函数返回nums(最大值){
让返回的nums=[];
对于(设i=11;i始终以2为增量,并搜索一种方法,每增加3次,以其他2为增量
let returnedNums = [];
let maxValue=120;
for (let i = 11,inc=1; i <= maxValue;i+=2,inc++) {
returnedNums.push(i);
console.log(i);
if(inc==2 || ((inc-3)>0 && (inc-3)%3==0)) i+=2;
}
似乎“想要的增量”遵循一个简单的等式:
- 4的循环(->使用模除
%4
)
- 四分之一的值为4(->在条件中使用
==0
)
- 其他值,其他值为2
这段代码使用生成器函数怎么样
const生成器=(启动)=>{
让电流=启动;
设指数=0;
return()=>{
常数结果=当前值;
当前+=(指数+++3)%4==0?4:2;
返回结果;
};
};
常数f=生成器(11);//起始值
对于(;;){
设next=f();
如果(下一个>40)//最大值
打破
console.log(下一步);
}
使用Node.js进行测试运行:
$node dummy.js
11
13
17
19
21
23
27
29
31
33
37
39
对于这种情况,我建议您,因为以下是解决此类问题的有效方法:
函数返回nums(最大值){
log(returnNumsRecursive(maxValue,11,0,[2,4,2,2],[11]);
}
函数returnNumsRecursive(maxValue、value、iteration、patternArray、arrayOfValues){
如果(迭代===patternArray.length)迭代=0;
让newValue=value+patternArray[迭代];
if(newValue>maxValue)返回ArrayOfValue;
arrayOfValues.push(newValue);
if(newValue==maxValue)返回ArrayOfValue;
返回returnNumsRecursive(maxValue、newValue、++迭代、patternArray、arrayOfValues);
}
returnNums(50);
谢谢你的好主意
就我而言,我已经成功地解决了我的问题,使用您的一些想法如下
let incValue;
let incCounter = 3;
function increment() {
incCounter % 4 === 0 ? (incValue = 4) : (incValue = 2);
incCounter += 1;
return incValue;
}
function returnNums(maxValue) {
let returnedNums = [];
for (let i = 11; i <= maxValue; ) {
returnedNums.push(i);
i += inc();
}
return returnedNums;
}
returnNums(30); // => [11, 13, 17, 19, 21, 23, 27, 29]
let-incValue;
设incCounter=3;
函数增量(){
incCounter%4==0?(incValue=4):(incValue=2);
incCounter+=1;
返回值;
}
函数返回nums(最大值){
让返回的nums=[];
for(设i=11;i[11,13,17,19,21,23,27,29]
您可以添加一个j
变量来迭代[2,4,2,2]
数组,并通过arr[j%arr.length]递增i
让arr=[2,4,2,2];
函数返回nums(最大值){
让返回的nums=[];
对于(设i=11,j=0;i
start=11;
结束=100;
patern=[2,4,2,2]
对于(i2=0;开始
let incValue;
let incCounter = 3;
function increment() {
incCounter % 4 === 0 ? (incValue = 4) : (incValue = 2);
incCounter += 1;
return incValue;
}
function returnNums(maxValue) {
let returnedNums = [];
for (let i = 11; i <= maxValue; ) {
returnedNums.push(i);
i += inc();
}
return returnedNums;
}
returnNums(30); // => [11, 13, 17, 19, 21, 23, 27, 29]