我修改了以下链接中的代码
How to move to prev/next element of an array
我喜欢第二个答案并理解代码,但我是初学者,我无法弄清楚如何重置索引,以便每次调用此函数时它都会遍历数组。海报说了一些关于使用方法将迭代器设置为0的事情。有人可以告诉我正确的语法应该是什么。我会提供我所做的,但我的示例代码不能被接受。感谢
感谢您的回复,我现在明白他的意思是重置,但这不是我想要的。我想创建一个函数,如果我使用一个键,它将移动数组指针并读取我的项目。如果指针到达数组的末尾则意味着返回到开头
我修改了下面的方法之一,这意味着将迭代器设置为0而不是返回false。
arr.next =(function(){return(++ cur< this.length)?this [cur]:cur = -1;});
当我使用此函数时,它将遍历数组,但在结束和开始之间它将返回-1。是否有可能阻止这种情况发生?
答案 0 :(得分:0)
只需再次调用函数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
答案 1 :(得分:0)
将reset
方法添加到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;
};
答案 2 :(得分:0)
只需向数组添加重置功能:
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