You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用简洁方式获取环形缓冲区数组的前序索引?

环形缓冲区中获取前序索引的简洁实现

我们有一个数组:

array = [1, 3, 5, 78]

将其当作环形缓冲区(末尾元素与首元素相连)使用时,获取任意元素的下一个索引有很简洁的写法:

element = 3
index = array.findIndex(e => e == 3)
nextIndex = (index + 1) % array.length // 核心代码

这行代码能完美适配三种场景:

  • 未找到元素(index == -1)
  • 元素是最后一个索引(index == 3)
  • 找到元素且非最后一个索引

但要获取前序索引(previousIndex)时,好像得针对以下三种场景分别写逻辑:

  • 未找到元素
  • 元素是第一个元素
  • 找到元素且非第一个元素

有没有简洁直观的一行代码能直接搞定前序索引?


当然有,核心思路是先加上数组长度再取余,避免负数运算带来的问题:

previousIndex = (index - 1 + array.length) % array.length

我们验证三种场景:

  1. 未找到元素(index = -1):
    (-1 -1 + 4) %4 = 2%4 =2,和nextIndex逻辑一致,返回合法索引(虽未找到元素时结果无实际意义,但保持了逻辑统一性)
  2. 元素是第一个索引(index=0):
    (0-1+4)%4=3%4=3,正确返回最后一个元素的索引
  3. 找到元素且非第一个索引(比如index=1):
    (1-1+4)%4=0%4=0,正确返回前一个元素的索引

这样一行代码就覆盖了所有场景,和获取下一个索引的写法保持了同样的简洁性。

内容的提问来源于stack exchange,提问作者fguillen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 01:09:55