Javascript 如何移动到数组的上一个/下一个元素,重置索引

Javascript 如何移动到数组的上一个/下一个元素,重置索引,javascript,arrays,Javascript,Arrays,我已经从下面的链接修改了代码 我喜欢第二个答案并理解代码,但我是一个初学者,我无法解决如何重置索引,以便每次调用此函数时,它都在数组中循环。海报介绍了如何使用方法将迭代器设置为0。有人能告诉我正确的语法应该是什么吗。我会提供我所做的,但我的示例代码不能被接受。谢谢 谢谢你的回复,我现在明白他说的重置是什么意思了,但这不是我想要的。我想创建一个函数,如果我使用一个键,它将移动数组指针并读取该项。如果指针到达数组的末尾,它将返回到数组的开头 我修改了下面的一个方法,这意味着将迭代器设置为0,而不是

我已经从下面的链接修改了代码

我喜欢第二个答案并理解代码,但我是一个初学者,我无法解决如何重置索引,以便每次调用此函数时,它都在数组中循环。海报介绍了如何使用方法将迭代器设置为0。有人能告诉我正确的语法应该是什么吗。我会提供我所做的,但我的示例代码不能被接受。谢谢

谢谢你的回复,我现在明白他说的重置是什么意思了,但这不是我想要的。我想创建一个函数,如果我使用一个键,它将移动数组指针并读取该项。如果指针到达数组的末尾,它将返回到数组的开头

我修改了下面的一个方法,这意味着将迭代器设置为0,而不是返回false

arr.next=(函数(){return(++cur
当我使用这个函数时,它将在数组中循环,但在结束和开始之间,它将返回-1。有可能阻止这种情况发生吗

只调用函数
iterifyArr(fibonacci)再次重置它:

var iterifyArr = function (arr) {
    var cur = 0;
    arr.next = (function () { return (++cur >= this.length) ? false : this[cur]; });
    arr.prev = (function () { return (--cur < 0) ? false : this[cur]; });
    return arr;
};

var fibonacci = [1, 1, 2, 3, 5, 8, 13];
iterifyArr(fibonacci);

console.log(fibonacci.next())//1
console.log(fibonacci.next())//2
console.log(fibonacci.next())//3
console.log(fibonacci.next())//5
iterifyArr(fibonacci);
console.log(fibonacci.next())//1
console.log(fibonacci.next())//2
var iterifyArr=函数(arr){
var-cur=0;
arr.next=(函数(){return(++cur>=this.length)?false:this[cur];});
arr.prev=(函数(){return(-cur<0)?false:this[cur];});
返回arr;
};
var fibonacci=[1,1,2,3,5,8,13];
iterifyArr(斐波那契);
console.log(fibonacci.next())//1
console.log(fibonacci.next())//2
console.log(fibonacci.next())//3
console.log(fibonacci.next())//5
iterifyArr(斐波那契);
console.log(fibonacci.next())//1
console.log(fibonacci.next())//2

重置
方法添加到
iterifyArr

var iterifyArr = function (arr) {
    var cur = 0;
    arr.next = (function () { return (++cur >= this.length) ? false : this[cur]; });
    arr.prev = (function () { return (--cur < 0) ? false : this[cur]; });
    arr.reset = (function () { cur = 0; });
    return arr;
};
var iterifyArr=函数(arr){
var-cur=0;
arr.next=(函数(){return(++cur>=this.length)?false:this[cur];});
arr.prev=(函数(){return(-cur<0)?false:this[cur];});
arr.reset=(函数(){cur=0;});
返回arr;
};

只需在阵列中添加重置功能:

Array.prototype.next = function() {
    if (!((this.current + 1) in this)) return false;
    return this[++this.current];
};

Array.prototype.prev = function() {
    if (!((this.current - 1) in this)) return false;
    return this[-this.current];
};

Array.prototype.reset = function() {
    this.current = 0;
    return true;
};

var fibonacci = [1,1,2,3,5,8,13,21];
fibonacci.reset(); // init current to 0. use reset where ever you want
fibonacci.prev(); // returns false
fibonacci.next(); // returns 1
fibonacci.next(); // returns 1
fibonacci.next(); // returns 2
fibonacci.next(); // returns 3
fibonacci.next(); // returns 5
fibonacci.next(); // returns 8

fibonacci.prev(); // returns 5

fibonacci.next(); // returns 8
fibonacci.next(); // returns 13
fibonacci.next(); // returns false

fibonacci.reset();
fibonacci.next(); // returns 1

你说的“不能接受”是什么意思??由于某种原因,您不能将其发布到此处吗?您是否将代码放入了代码块中?如果它包含HTML,则将其从问答正文中删除,除非它位于代码块中。