我在这里要做的是使用一个循环函数,这个循环会以不对称的方式增加一个数字,并在每次迭代中返回它。
增量的模式将是循环的,并随着时间的推移重复:2, 4, 2, 2, 2, 4, 2, 2, 2, 4, 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
}
}发布于 2019-08-29 11:07:07
您可以添加一个j变量来迭代[2, 4, 2, 2]数组并通过arr[j % arr.length]递增i。
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));
发布于 2019-08-29 10:20:56
始终递增2,并搜索一种与其他2每3递增一次增量的方式。
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;
}输出量
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发布于 2019-08-29 10:28:56
似乎您“想要增量”遵循一个简单的等式:
% 4)== 0 )这段使用生成器函数的代码如何?
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进行测试运行:
$ node dummy.js
11
13
17
19
21
23
27
29
31
33
37
39https://stackoverflow.com/questions/57708000
复制相似问题