如何移动到数组的prev / next元素,重置索引

时间:2014-04-29 18:24:09

标签: javascript arrays

我修改了以下链接中的代码

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。是否有可能阻止这种情况发生?

3 个答案:

答案 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;
};

http://jsbin.com/naduwoju/1/edit

答案 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