javascript - 反向数组循环 - 超过索引 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,则它需要返回到数组的最后一个索引,因此有效地反向循环。但是,我希望使用尽可能少的代码来实现这一点,例如增加指针的模数解决方案,但如果它到达末尾则将其循环回开始。
有没有像模数解决方案这样的速记解决方案?
编辑 响应重复标志。那里引用的问题和答案确实适用于我的问题,所以我理解标记。但是,它没有引用这种向后循环列表并像这种情况一样从前到后循环的情况(即没有分支)。经过相当长的一段时间后,我还没有遇到这个解决方案,所以我认为这个问题会对遇到像我这样的类似问题的其他人产生积极影响。
解决方案
你可以试试这个
Array.prototype.prev = function () {
return this[(this.current - 1 + this.length) % this.length]
};
推荐阅读
- list - 如何根据列表中的先前值过滤 Haskell 中的列表元素?
- c - 如何将函数标记为clang-tidy的纯函数
- linked-list - 如何按日期顺序创建事件队列
- c# - 如何在多个集合中进行排序
- java - 在这种情况下如何处理 nullsFirst
- ffmpeg - Ffmpeg rtmp 到 hls 的转换但是如何解决网络问题?
- java - 从 Firestore 增加值
- java - 如何在android studio中使用parcelable在活动之间传递数据
- javascript - Firebase Cloud Functions onUpdate 触发器向 Firestore 返回不可靠的时间戳
- windows - linux中多个文件或每三行的平均广告标准偏差