Как правильно использовать массивы и циклы - PullRequest
0 голосов
/ 18 января 2019

Я занимаюсь кодированием в теории музыкальных аккордов и столкнулся с проблемами заполнения и изменения массивов в циклах.

В конечном счете, я хочу вычислить аккорды только из списка нот.

Я хочу, чтобы заглавные буквы в массиве 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 голосов
/ 18 января 2019

Хорошо, Оскар, извини, что сомневался в тебе, после пересмотра твоего кода я сделал следующие исправления:

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...