如何正确使用数组和循环

时间:2019-01-18 13:52:00

标签: javascript arrays loops

我正在做一些音乐和弦理论编码,遇到循环填充和修改数组的问题。

最终我只想从音符列表中计算和弦。

我希望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”,...等等。

请尝试运行代码,以便您了解问题并回答我必须更改的内容!

谢谢。

1 个答案:

答案 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));

希望这会有所帮助。