JavaScript如何通过变量按名称调用多个数组中的某一个?
解决方案
- 核心思路:将所有音阶数组存入一个映射对象,用音阶名称作为对象的键,这样就能通过字符串变量直接获取对应数组,彻底避免大量if判断。
修改后的代码示例:
const notes = ['A','A#','B','C','C#','D','D#','E','F','F#','G','G#','A','A#','B','C','C#','D','D#','E','F','F#','G','G#','A']; // 把所有音阶数组统一放到映射对象中 const scaleMap = { minor: [0,2,3,5,7,8,10,12], major: [0,2,4,5,7,9,11,12] // 后续新增音阶直接在这里添加键值对即可,比如 dorian: [0,2,3,5,7,9,10,12] }; let keyRoot = 5; let keyScale = 'minor'; let output = ""; // 通过字符串变量直接从映射对象中获取目标音阶数组 const targetScale = scaleMap[keyScale]; for(let i=0; i<8; i++){ let songKey = keyRoot -1 + targetScale[i] output += notes[songKey] + ' ' } console.log(output);
- 扩展性说明:后续新增任何音阶,只需要在
scaleMap对象里添加对应的键值对,不需要改动循环逻辑部分,代码维护成本极低。
内容的提问来源于stack exchange,提问作者moe_reezy
相关产品推荐
相关产品推荐

