我目前正在扩展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,则需要返回到数组的最后一个索引,因此有效地反向循环。但是,我希望使用尽可能少的代码,例如增加指针但如果到达末尾将其循环回以开始的模数解决方案。
是否可以像模数解决方案这样的速记解决方案?
编辑 响应复制标志。引用的问题和答案确实确实适用于我的问题,因此我理解标记。但是,它没有引用这种将列表向后循环和从前向后循环的情况(没有分支)。经过相当长的时间,我没有遇到过这种解决方案,所以我认为这个问题会对其他遇到类似我的问题的人产生积极影响。
答案 0 :(得分:3)
您可以尝试
Array.prototype.prev = function () {
return this[(this.current - 1 + this.length) % this.length]
};