【发布时间】:2016-06-14 08:27:29
【问题描述】:
我正在尝试创建一个音乐游戏,我必须从基本的 2D 数组生成 3D 数组。计划是在修改之前将 2D 数组复制粘贴 4 次到 3D 数组中,如图:
var note3base = [
["C", "E", "G"],
["C#", "E#", "G#"],
["Db", "F", "Ab"],
["D", "F#", "A"],
["Eb", "G", "Bb"],
["E", "G#", "B"],
["F", "A", "C"],
["F#", "A#", "C#"],
["Gb", "Bb", "Db"],
["G", "B", "D"],
["Ab", "C", "Eb"],
["A", "C#", "E"],
["Bb", "D", "F"],
["B", "D#", "F#"],
["Cb", "Eb", "Gb"]
];
var note3 = new Array(4);
for (h=0;h<note3.length;h++){
note3[h] = note3base;
} //creates 4 copies of note3base in a 3d-array to be modified
for (i=0;i<note3[0].length;i++){
note3[1][i][1] = flat(note3[1][i][1]); //minor
note3[2][i][1] = flat(note3[2][i][1]);
note3[2][i][2] = flat(note3[2][i][2]); //dim
note3[3][i][2] = sharp(note3[3][i][2]); //aug
} //how did everything become the same?
现在的问题似乎是for 循环似乎将该方法应用于每个数组(0 到 3)。
note3[0][1] 的期望输出为 C E G,note3[1][1] 为 C Eb G,note[2][1] 为 C Eb Gb,note[3][1 ] 将是 C E G#。
非常感谢任何帮助!
我在下面包含了(工作的)尖锐和平坦的方法以供参考:
function sharp(note){
var newnote;
if (note.charAt(1) == "#"){
newnote = note.replace("#", "x");
} else if (note.charAt(1) == "b"){
newnote = note.replace("b", "");
} else {
newnote = note + "#";
}
return newnote;
}
function flat(note){
var newnote;
if (note.charAt(1) == "#"){
newnote = note.replace("#", "");
} else {
newnote = note + "b";
}
return newnote;
}
【问题讨论】:
-
请注意,您的
flat()函数需要像您的sharp()函数一样的else if案例,以覆盖双平面。
标签: javascript multidimensional-array