我正在做一些音乐和弦理论编码,遇到循环填充和修改数组的问题。
最终我只想从音符列表中计算和弦。
我希望Akkorde
数组中的字母大写(第二个记录到控制台),以匹配Notenname
数组中的字母大写(首先记录到控制台) )。
const Noten = [
[[0, "A", null]],
[[1, "A", "#"], [1, "B", "b"]],
[[2, "B", null]],
[[3, "C", null]],
[[4, "C", "#"], [4, "D", "b"]],
[[5, "D", null]],
[[6, "D", "#"], [6, "E", "b"]],
[[7, "E", null]],
[[8, "F", null]],
[[9, "F", "#"], [9, "G", "b"]],
[[10, "G", null]],
[[11, "G", "#"], [11, "A", "b"]]
];
const Akkorde = [];
var Auswahl = 0;
var Schritt = 3;
for (let JedeNote = 0; JedeNote < 2 * Noten.length; JedeNote++) {
let Grundton = Noten[Auswahl];
Grundton.forEach(Notenname => {
Notenname[1] =
Schritt === 3 ?
(Notenname[1] = Notenname[1].toLowerCase()) :
(Notenname[1] = Notenname[1].toUpperCase());
console.log(Notenname);
});
let Akkord = [Grundton];
Akkorde.push(Akkord);
Auswahl += Schritt;
Auswahl = Auswahl >= 12 ? (Auswahl -= 12) : Auswahl;
Schritt = Schritt === 3 ? 4 : 3;
}
console.log(Akkorde);
我希望大写字母可以交替使用:“ a”,“ C”,“ e”,“ G”等...
实际结果是错误的大写:“ A”,“ c”,“ E”,“ g”,...等等。
请尝试运行代码,以便您了解问题并回答我必须更改的内容!
谢谢。
答案 0 :(得分:1)
好吧,奥斯卡(Oscar)怀疑您,在修改代码后,我做了以下更正:
const Noten = [
[[0, "A", null]],
[[1, "A", "#"], [1, "B", "b"]],
[[2, "B", null]],
[[3, "C", null]],
[[4, "C", "#"], [4, "D", "b"]],
[[5, "D", null]],
[[6, "D", "#"], [6, "E", "b"]],
[[7, "E", null]],
[[8, "F", null]],
[[9, "F", "#"], [9, "G", "b"]],
[[10, "G", null]],
[[11, "G", "#"], [11, "A", "b"]]
];
const Akkorde = [];
var Auswahl = 0;
var Schritt = 3;
for (let JedeNote = 0; JedeNote < 2 * Noten.length; JedeNote++) {
let Grundton = Noten[Auswahl];
//Map the values from Grundton to a variable Akkord
let Akkord = Grundton.map(Notenname => {
//Copy the value of the element into a new variable
const Akkordname = [...Notenname];
//Only make the note lowercase if Schritt === 3
if(Schritt === 3) {
Akkordname[1] = Akkordname[1].toLowerCase();
}
console.log("Notenname", JSON.stringify(Akkordname));
return Akkordname;
});
Akkorde.push(Akkord);
Auswahl += Schritt;
Auswahl = Auswahl >= 12 ? (Auswahl - 12) : Auswahl;
Schritt = Schritt === 3 ? 4 : 3;
}
console.log("Akkorde", JSON.stringify(Akkorde));
希望这会有所帮助。