Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 具有不对称增量的循环_Javascript - Fatal编程技术网

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]