首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带不对称增量的循环

带不对称增量的循环
EN

Stack Overflow用户
提问于 2019-08-29 10:16:43
回答 6查看 103关注 0票数 3

我在这里要做的是使用一个循环函数,这个循环会以不对称的方式增加一个数字,并在每次迭代中返回它。

  • 我会从11开始。
  • 我会增加2到13,
  • 增加4,得到17,
  • 增加2到19,
  • 增加2到21,
  • 增加2到23,
  • 增加4.

增量的模式将是循环的,并随着时间的推移重复:2, 4, 2, 2, 2, 4, 2, 2, 2, 4, 2, 2, 2, 4, 2, 2, 2, 4等等。

我一直在考虑for和while循环、生成器函数或Array.prototype.reduce,但似乎无法找到一个简单的解决方案来解决问题。

我还没有想出任何好的起点来说明我该怎么做.下面是一个示例,说明我希望它如何将值推送到数组,但它们也可以由一个函数返回.

代码语言:javascript
复制
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
  }
}
EN

回答 6

Stack Overflow用户

发布于 2019-08-29 11:07:07

您可以添加一个j变量来迭代[2, 4, 2, 2]数组并通过arr[j % arr.length]递增i

代码语言:javascript
复制
let arr = [2, 4, 2, 2];

function returnNums(maxValue) {
  let returnedNums = [];

  for (let i = 11, j = 0; i <= maxValue; j++) {
    returnedNums.push(i);
    // increment i following my desired pattern right here
    i += arr[j % arr.length]; 
  }
  return returnedNums;
}

console.log(returnNums(20));
console.log(returnNums(50));

票数 2
EN

Stack Overflow用户

发布于 2019-08-29 10:20:56

始终递增2,并搜索一种与其他2每3递增一次增量的方式。

代码语言:javascript
复制
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; 
  }

输出量

代码语言:javascript
复制
 11
 13
 17
 19
 21
 23
 27
 29
 31
 35
 37
 39
 43
 45
 47
 51
 53
 55
 59
 61
 63
 67
 69
 71
 75
 77
 79
 83
 85
 87
 91
 93
 95
 99
 101
 103
 107
 109
 111
 115
 117
 119
票数 0
EN

Stack Overflow用户

发布于 2019-08-29 10:28:56

似乎您“想要增量”遵循一个简单的等式:

  • 周期4 (->使用模块化除法% 4)
  • 每4个值中就有一个为4 (->在条件中使用== 0 )
  • 其他值为2

这段使用生成器函数的代码如何?

代码语言:javascript
复制
const generator = (start) => {
    let current = start;
    let index   = 0;
    return () => {
        const result = current;
        current += (index++ + 3) % 4 == 0 ? 4 : 2;
        return result;
    };
};

const f = generator(11); // start value
for (;;) {
    let next = f();
    if (next > 40) // max value
        break;
    console.log(next);
}

使用Node.js进行测试运行:

代码语言:javascript
复制
$ node dummy.js
11
13
17
19
21
23
27
29
31
33
37
39
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57708000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档