1 起因
做轮播图偶然想到了。记录一下以后备用。应该可以适用于所有需要上溢/下溢的场景。
2 描述
一般轮播图都会有个[0,arr.length-1]的遍历范围,到了边界之后,有一些处理方法。
一种比较常见的是到了边界之后就不再增加/减少。另一种是到了边界之后,从另外一个边界出发,有点上溢/下溢的意思。
边界处理代码写if处理不是不好,我只是感觉有点冗余了,所以思考有没有好办法少写点代码。想了想还真有!
2.1 名词定义
curr:当前索引
len:数组长度
2.2 代码案例
这里取步长为1的情况,其他情况类推即可。
步长为+1时,利用取余运算实现上溢效果:
curr = (curr + 1) % len
步长为-1时,利用边界(0)和逻辑或运算实现下溢效果:
curr = (curr || len) - 1
这样就能免判断实现上溢/下溢的效果。
3 总结
只要能够把集合映射到[0,len],就能利用取余和布尔值的隐式转型实现上溢/下溢效果。