到达数组末尾时从增量切换到减量

时间:2016-11-15 16:21:00

标签: javascript jquery

我循环遍历一个数组。当current===arr.length我想再次减少current时。然后,当current === 0我想再次增加current时。

以下是我的代码。我的问题有意义吗?我无法弄清楚脑子里的逻辑。

var arr = [1,2,3,4],
    current = 0;

$('body').click(function(){
    console.log(arr[current]);
    current++;
    if(current === (arr.length -1)){
        current--;
    }
});

5 个答案:

答案 0 :(得分:2)

这不是很漂亮,但这是我想出的:

var arr = [1,2,3,4],
    current = 0,
    dir = "up";

$('body').click(function(){
    if(current === arr.length - 1){
        dir = "down";
    } else if(current === 0){
        dir = "up";
    }

    switch(dir) {
        case "up":
           current++;
           break;
        case "down":
           current--;
           break;
    }

    console.log(arr[current]);
});

答案 1 :(得分:0)

我和@SeanKendle几乎一样。我只使用第3个var,因为它使代码更清晰IMO。

var arr = [1,2,3,4];
var current = 0;
var modifier = 1; 

$('body').click(function(){        
    if(current === arr.length -1){
        modifier = -1;
    }
    else if(current === 0){
        modifier = 1;
    }  
  current = current + modifier;
  console.log(arr[current]);
});

答案 2 :(得分:0)

你可以给我们一个负面的增量器。

var arr = [1,2,3,4],
    current = 0,
    inc = 1;

$('body').click(function(){
    console.log(arr[current]);
    current += inc;
    if (current === arr.length || current < 0) {
        inc *= -1;
        current += 2 * inc;
    }
});

答案 3 :(得分:0)

给它一个旋转...

var arr = [1,2,3,4],
    current = 0,
    increment = true;

$('body').click(function(){
    console.log(arr[current]);

    if(current === arr.length - 1){
        increment = false;
    } else if (current === 0) {
        increment = true;
    }

    if(increment) {
        current++;
    } else {
        current--;
    }
});

答案 4 :(得分:0)

对于您的用例,具有n个元素的数组具有2 * n - 2个不同的状态。所以我们用%重置它并在访问数组时转换索引。

var arr = [1,2,3,4],
    current = 0;

$('body').click(function(){
    console.log(arr[current>=arr.length?arr.length-2-(current-arr.length):current]);
    current = ++current % ( 2 * arr.length - 2 );
});