Ich versuche ein Musikspiel zu erstellen, bei dem ich aus einem einfachen 2D-Array ein 3D-Array generieren muss. Der Plan war, zu kopieren und die 2D-Array 4 mal in das 3D-Array einfügen, bevor es zu ändern, wie es gezeigt:Erzeugen eines 3D-Arrays aus einem 2D-Array
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?
Das Problem scheint jetzt zu sein, dass die for
Schleife um die Methode zu jedem einzelnen Array zu gelten scheint (0 bis 3).
Die gewünschte Ausgabe für Note3 [0] [1] wäre CEG, Note3 [1] [1] wäre C Eb G, Note [2] [1] wäre C Eb Gb, Note [3] [ 1] wäre CEG #.
Jede Hilfe wird sehr geschätzt!
Ich habe die (Arbeits-) scharf und flach Methoden unten als Referenz enthalten:
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;
}
Beachten Sie, dass Ihre 'flach()' Funktion einen 'sonst if' Fall wie Ihre' scharf braucht() 'Funktion, zur Deckung Doppel-Wohnungen. – nnnnnn