JS中数组索引超出末尾时如何自动回到开头取值?
解决JS数组索引超出后自动从头计数的方案
你需要使用取模(%)运算对计算后的索引做归一化处理,当索引超出数组长度时,取模运算会自动返回绕回数组开头后的合法索引。
修改后的代码如下:
const musicNotes = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B']; // 普通函数写法 function getThirdDegreeNote(tonalityNote) { const tonalityNoteIndex = musicNotes.indexOf(tonalityNote); // 核心逻辑:计算后的索引对数组长度取模,实现自动循环 const targetIndex = (tonalityNoteIndex + 4) % musicNotes.length; return musicNotes[targetIndex]; }
如果你的getThirdDegreeNote是类内部的方法,只需要替换原方法内的索引计算和返回逻辑即可,方法定义部分不需要改动。
效果验证
当tonalityNote为B时,它在数组中的索引为11:
- 计算偏移后的值:
11 + 4 = 15 - 对数组长度12取模:
15 % 12 = 3 - 数组索引3对应的元素为
D#,完全符合需求。
补充说明
该写法通用性很强,后续如果调整偏移量、或者修改musicNotes数组长度,都不需要改动核心逻辑。如果你的场景存在负偏移(比如往前数音符)的需求,可以把索引计算逻辑改为(tonalityNoteIndex + 偏移量 + musicNotes.length) % musicNotes.length,避免出现负索引导致的异常。
内容的提问来源于stack exchange,提问作者AlexBack
相关产品推荐
相关产品推荐

