JavaScript循环数组按步长取值越界返回undefined如何解决
循环数组偏移取值实现方案
核心使用**模运算(%)**对偏移后的索引做归一化处理,即可自动处理索引越界后从数组头部循环取值的需求。
修正后的完整代码如下:
var indices=['1','3','5','7','9','11']; var index_to_add=2; var uservalue='1'; // 用户传入的参数 var index = indices.indexOf(uservalue); // 兼容用户传入值不存在于数组的场景,可根据业务需求调整返回值 if (index === -1) { return null; } var arrayLength = indices.length; // 加arrayLength是为了兼容负步长场景,若步长固定为正可省略该部分 var targetIndex = (index + index_to_add + arrayLength) % arrayLength; return indices[targetIndex];
实现逻辑说明
- 模运算可以保证计算出的索引始终落在
0 ~ 数组长度-1的有效范围内:比如示例数组长度为6,当传入元素是'11'时,对应索引为5,加步长2得到7,7对6取余得到1,对应数组元素为'3',完全符合需求。 - 代码中的额外
+ arrayLength处理,是为了适配步长为负数的场景,如果你的步长永远为正,可以简化为(index + index_to_add) % arrayLength。
内容的提问来源于stack exchange,提问作者Prakhar Gyawali
相关产品推荐
相关产品推荐

