javascript - 在两个方向上迭代一个范围
问题描述
在两个方向上通过某个范围进行循环迭代是一项非常常见且简单的任务:
var currentIndex = 0;
var range = ['a', 'b', 'c', 'd', 'e', 'f'];
function getNextItem(direction) {
currentIndex += direction;
if (currentIndex >= range.length) { currentIndex = 0; }
if (currentIndex < 0) { currentIndex = range.length-1; }
return range[currentIndex];
}
// get next "right" item
console.log(getNextItem(1));
// get next "left" item
console.log(getNextItem(-1));
上面的代码完美运行,但我花了大约一个小时试图摆脱双重if
检查。
如果没有if有什么办法解决吗?可能是单线?
解决方案
要将两个if
s 变成一个无条件语句,您可以将 the 添加range.length
到currentIndex
然后使用模:
var currentIndex = 0;
var range = ['a','b','c','d','e','f'];
function getNextItem(direction) {
currentIndex = (currentIndex + direction + range.length) % range.length;
return range[currentIndex];
}
// get next "right" item
console.log(getNextItem(1));
console.log(getNextItem(1));
// get next "left" item
console.log(getNextItem(-1));
console.log(getNextItem(-1));
console.log(getNextItem(-1));
console.log(getNextItem(4));
console.log(getNextItem(1));
console.log(getNextItem(1));
console.log(getNextItem(1));
推荐阅读
- file - Rust:如何从文件中读取十六进制
- python - 转换 keras 模型时,Kaggle GPU 不起作用
- java - 将二进制格式保存到整数列表的问题
- php - 为什么递归静态函数的行为不像预期的那样?
- c# - Wpf Datagrid动态列如何为行中的单元格着色
- sql - Accsss SQL 查询使用“where”子句链接备注字段(长文本),但 Access 正在删除记录
- python - Python 在 __init__ 中定义函数
- c++ - Visual Studio 代码错误地将 point.c 文件识别为 C++ 源文件
- reactjs - 在 ES6 中使用 alt 和 react
- r - 如何为不同的“stat_smooth”线添加图例以及如何将其放置在左上角?