首页 > 解决方案 > 反向数组循环 - 超过索引 0 时返回最后一个索引

问题描述

我目前正在扩展 Array.prototype 以包含一个简单的“指针”系统,因为我可以在几个不同的位置上移动而无需循环。

Array.prototype.current = 0;

该指针可以在数组中前后移动,使用以下方法向前移动:

Array.prototype.next = function () {
   return this[(this.current + 1) % this.length];
};

这行代码允许指针加一,除非它到达最终索引,在这种情况下,如果再次增加,它将返回索引 0 而不是越界(因为模数)。

但是,现在我想要完全相同,但是当减少指针时。这将创建类似的东西,即:

Array.prototype.prev = function () {
   return this[(this.current - 1) /* similar to modulo here */];
};

我在这里想要的是在任何正常情况下指针都会减 1。但是,如果指针为 0,则它需要返回到数组的最后一个索引,因此有效地反向循环。但是,我希望使用尽可能少的代码来实现这一点,例如增加指针的模数解决方案,但如果它到达末尾则将其循环回开始。

有没有像模数解决方案这样的速记解决方案?

编辑 响应重复标志。那里引用的问题和答案确实适用于我的问题,所以我理解标记。但是,它没有引用这种向后循环列表并像这种情况一样从前到后循环的情况(即没有分支)。经过相当长的一段时间后,我还没有遇到这个解决方案,所以我认为这个问题会对遇到像我这样的类似问题的其他人产生积极影响。

标签: javascriptarraysloops

解决方案


你可以试试这个

Array.prototype.prev = function () {
   return this[(this.current - 1 + this.length) % this.length] 
};

推荐阅读