Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何正确使用数组和循环_Javascript_Arrays_Loops - Fatal编程技术网

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
。。。。