Javascript 如何正确使用数组和循环
我正在做一些音乐和弦理论编码,在循环中填充和修改数组时遇到了问题 最终,我想从一系列音符中计算和弦 我希望Javascript 如何正确使用数组和循环,javascript,arrays,loops,Javascript,Arrays,Loops,我正在做一些音乐和弦理论编码,在循环中填充和修改数组时遇到了问题 最终,我想从一系列音符中计算和弦 我希望Akkorde数组中字母的大小写(第二个记录到控制台)与Notenname数组中字母的大小写匹配(第一个记录到控制台) const Noten=[ [[0,“A”,空]], [1,“A”、“#”]、[1,“B”、“B”], [[2,“B”,空]], [3,“C”,空]], [4,“C”,“#”,“D”,“b”], [5,“D”,空]], [6,“D”、“#”]、[6,“E”、“b”], [
Akkorde
数组中字母的大小写(第二个记录到控制台)与Notenname
数组中字母的大小写匹配(第一个记录到控制台)
const Noten=[
[[0,“A”,空]],
[1,“A”、“#”]、[1,“B”、“B”],
[[2,“B”,空]],
[3,“C”,空]],
[4,“C”,“#”,“D”,“b”],
[5,“D”,空]],
[6,“D”、“#”]、[6,“E”、“b”],
[[7,“E”,空]],
[[8,“F”,空]],
[9,“F”、“#”]、[9,“G”、“b”],
[[10,“G”,空]],
[11,“G”、“#”]、[11,“A”、“b”]
];
常数Akkorde=[];
var Auswahl=0;
var Schritt=3;
for(让jedelete=0;jedelete<2*Noten.length;jedelete++){
设Grundton=Noten[Auswahl];
forEach(Notenname=>{
注释名称[1]=
施里特===3?
(Notenname[1]=Notenname[1]。toLowerCase()):
(Notenname[1]=Notenname[1].toUpperCase());
console.log(Notenname);
});
设Akkord=[Grundton];
阿克库尔德推(阿克库尔德);
Auswahl+=Schritt;
Auswahl=Auswahl>=12?(Auswahl-=12):Auswahl;
Schritt=Schritt==3?4:3;
}
控制台日志(Akkorde)代码>好的,奥斯卡很抱歉怀疑你,在修改你的代码后,我做了以下更正:
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));
const Noten=[
[[0,“A”,空]],
[1,“A”、“#”]、[1,“B”、“B”],
[[2,“B”,空]],
[3,“C”,空]],
[4,“C”,“#”,“D”,“b”],
[5,“D”,空]],
[6,“D”、“#”]、[6,“E”、“b”],
[[7,“E”,空]],
[[8,“F”,空]],
[9,“F”、“#”]、[9,“G”、“b”],
[[10,“G”,空]],
[11,“G”、“#”]、[11,“A”、“b”]
];
常数Akkorde=[];
var Auswahl=0;
var Schritt=3;
for(让jedelete=0;jedelete<2*Noten.length;jedelete++){
设Grundton=Noten[Auswahl];
//将值从Grundton映射到变量Akkord
让Akkord=Grundton.map(Notenname=>{
//将元素的值复制到新变量中
const Akkordname=[…Notenname];
//如果Schritt==3,则仅将注释设置为小写
如果(Schritt==3){
Akkordname[1]=Akkordname[1].toLowerCase();
}
log(“Notenname”,JSON.stringify(Akkordname));
返回Akkordname;
});
阿克库尔德推(阿克库尔德);
Auswahl+=Schritt;
Auswahl=Auswahl>=12?(Auswahl-12):Auswahl;
Schritt=Schritt==3?4:3;
}
log(“Akkorde”,JSON.stringify(Akkorde));
希望这能有所帮助。Hi Oscar,如果当前算法给出的结果与您希望得到的结果相反,请将给出实际结果的逻辑颠倒过来。只需将Schritt==3
更改为Schritt!==3
这样你就可以得到相应大小写的钞票。没那么简单。第一个控制台输出完全正常-问题在于第二个。它应该匹配第一次输出的数据。确切地说,输出是不同的,因为比较应该是反向的。当Schritt==4
或Schritt!==3
嗯。我知道。但是您检查过第二个控制台输出了吗?即使将比较切换到!==3
。。。。