我循环遍历一个数组。当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--;
}
});
答案 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 );
});