循环不选择数组中的最后一项

时间:2015-10-31 05:31:32

标签: jquery arrays algorithm for-loop

SCRIPT

从for循环调用函数:

colorMe(globalStore.data[i].morning,globalStore.data[i].afternoon,globalStore.data[i].evening, globalStore.data[i].UUID);

功能

var k = 0;
var userarray = [];
var dayarray  = [];
var dayarray2 = [];
var dayarray3 = [];
var data = 0;
function colorMe(param,param_af,param_eve, param2)
{
    /*console.log("DAY "+param);
    console.log("user "+param2);*/
    //console.log("k= "+k);
    console.log("data= "+data);

    userarray.push(param2);
    //console.log("mY "+userarray[k]);
    dayarray.push(param);
    dayarray2.push(param_af);
    //console.log("afternoon "+dayarray2[k]);
    dayarray3.push(param_eve);
    //console.log("evening "+dayarray3[k]);
    //console.log("Day "+dayarray[k]);
    var len = userarray.length;
    console.log("K= "+k);
    for(;data < k;data++)
    {
        //console.log("data="+ data);
    var arr = dayarray[data];
    var arr2 = dayarray2[data];
    var arr3 = dayarray3[data];
    $("div.morning_"+userarray[data]+" span").each(function() {
                if(arr.indexOf($(this).attr("class")) > -1) {

                  $(this).css("color","#26F525");

                }
            });

            $("div.afternoon_"+userarray[data]+" span").each(function() {
                if(arr2.indexOf($(this).attr("class")) > -1) {

                  $(this).css("color","#26F525");

                }
            });
            $("div.evening_"+userarray[data]+" span").each(function() {
                if(arr3.indexOf($(this).attr("class")) > -1) {

                  $(this).css("color","#26F525");

                }
            });

    }
    k++;

}

console.log("data= "+data);  
console.log("k= "+k); 

记录计数器kdata

我注意到data= 0被记录了两次,这就是为什么数组中的最后一项不应用此函数的效果的原因。因为data仅循环到第6项而{ {1}}循环直到第7项。那么如何让k也循环到第7项并阻止它在开始时循环两次data

记录

(data= 0)

我试过了:

 data= 0 //once  
 K= 0  
 data= 0//twice  
 K= 1  
 data= 1  
 K= 2  
 data= 2  
 K= 3  
 data= 3  
 K= 4   
 data= 4  
 K= 5  
 data= 5  
 K= 6  
 data= 6  
 K= 7  

1)用有限数字替换for(;data < k;data++) ,如7,但它是函数     不会工作。
 2)仍然在for循环中使用k而不是<=     不能。
 3)定义<

2 个答案:

答案 0 :(得分:0)

for(;data < k;data++) //此处条件为data < k,因此0<0将失败,导致k++data仍为0。由于您的情况data=7,我们永远不会打印data < k

<script>
    var k = 0;
    var data = 0;
    function colorMe()
    {

        console.log("K= "+k);
        console.log("data= "+data);  
        for(;data < k;data++)//here since condition is data < k so 0<0 will fail which make `k++` but `data` is still 0
        {

        }
        k++;

    }


    for(var i=0;i<7;i++){
        colorMe();
    }
    console.log("data= "+data);  
    console.log("k= "+k); 
    </script>

答案 1 :(得分:0)

以下是我所看到的:
第一次到达此循环时for(;data < k;data++) kdata都等于零。因此,条件data < k为false,因此data永远不会增加,但k会因为它在循环外递增而增加。 解决此问题的一种方法是在循环之前增加k 而不是之后:

k++;
for(;data < k;data++) {
...
}

修改

另一种解决方案是将循环更改为for(;data <= k;data++)。这是一个展示它的工作小提琴:https://jsfiddle.net/eumepcvd/1/
我会再次尝试,如果它不起作用,那么你的错误可能是你没有发布的代码。

编辑2

这是另一个工作小提琴:http://jsfiddle.net/qm5mxe7q/1/
那个是你在评论中链接到的小提琴的分叉。
另请注意,数组中的第7个项目是第6项,因为它是零索引。如果你想要达到索引7那么数组中需要有8个项目。