我有三种方法,例如:
function method1(){
console.log('method1');
}
function method2(){
console.log('method2');
}
function method3(){
console.log('method3');
}
现在我将在if else条件中应用这些方法,如下所示:
for(var i=0;i<100;i++){
//for first 4 iteration apply method1:
if(i<4){
method1();
}
//next fifth iteration apply method2:
else if(i==4){
method2();
}
//next 3 iteration apply method3:
else if(i>4 && i<8){
method3();
}
//next ninth iteration apply method2:
else if(i==8){
method2();
}
//next 3 iteration apply method1:
else if(i>8 && i<12){
method1();
}
...........
}
像这样我要进行100次迭代,或者说如果它更长,那么编码过程会更长,并且可能会令人恼火。
因此,我认为可能有一种更简单的方法来解决这个问题。
为了让这个概念更清楚我想要做的事情,我将向您展示一个图表,从中可以很容易地找到这个问题的解决方案:
在准备这个问题的图表时,我想到了以下概念:
从上图中
for(var i=0; i<100; i++){
//find the series 5th, 9th, 13th, and so on and apply method2:
if( i == 5 + 4 * n){
method2();
}
//find the series between 9th and 5th and so on and apply method3:
else if( i > ( 5 + 4 * n ) && i < ( 5 + 4 * n - 1) ){
method3();
}
//for other iterations apply method 1:
else{
method1();
}
}//end for loop
所以,这几乎可能是在解决方案之后,但仍然混淆迭代到n。假设我将n置于for for(var i=0,n=0;i<100;i++)
之类的循环中,那么它将迭代,就像我是5然后n是5然后5 + 4 * 5 = 25并且永远不会得到匹配。
for(var i=0,n=0; i<100; i++){
if(i%4==0){
n=-1;
}
//now i becomes equal when i is 5 then n is -1 at 4th i so 0 at 5th i and 5+4*0 = 5.... matched
//now check for next 9th i equals n: i is 9 then n is -1 at 8th i so 0 at 9th i and 5+4*0=5... not matched as this time it should be 1 for n
嗯,仍然很难解决这个问题,因为n的值应该是-1,在第4 i和0在第8 i和1在第12 i等等.....
仍然不确定我的其他条件是否有效。 所以,请帮我解决这个问题。
您可以尽可能轻松地走自己的路。
答案 0 :(得分:2)
我认为你的程序遵循这种模式
for (var i = 0; i < 100; i += 1) {
if (i % 4 === 0 && i) {
method2(); // Current index is divisible by 4
} else if (i % 8 < 4) {
method1(); // Current index is within 0-3, 8-11, ...
} else {
method3(); // Current index is within 5-7, 13-15, ...
}
}
答案 1 :(得分:1)
在这些情况下,我会这样做:
我会选择好的excel,在1列中是迭代器i,在另一列是我想要运行的方法。
然后我会编写一个宏来自动生成复制/粘贴它的代码。这需要时间,但如果这是可重复使用的,那么excel就成了你的设计和文档。
答案 2 :(得分:1)
你可以用下面的模式编写代码,然后解决你的数学问题。
var foo = {
method1: function(){
console.log('method1');
},
method2: function(){
console.log('method2');
},
method3: function(){
console.log('method3');
}
}
var bar = function (num) {
// put your formular here
return num;
}
for(var i=0; i<100; i++){
foo['method'+bar(i)]();
}
答案 3 :(得分:1)
for (var i = 0; i < 100; i++) {
if (i > 0 && i % 4 == 0) {
method2();
}
else if (parseInt(i / 4) % 2 == 0) {
method1();
}
else {
method3();
}
}
答案 4 :(得分:1)
您的图表显示最初只有method1执行4次(0到3之间)。之后有一个方法3和方法1的模式,每个模式执行3次,但是由方法2分开(每4次)。如果在系列结束之前就是这种情况,那么以下代码将起作用 -
if (nCtr < 4) {
method1();
} else if ((nCtr % 4) == 0) {
method2();
} else if (((nCtr / 4) % 2) == 0) { // nCtr divided by 4 produces even number
Method1();
} else { // nCtr divided by 4 produces odd number
Method3();
}