Проблемы с доступом к n-му элементу многомерного массива в Javascript - PullRequest
1 голос
/ 01 ноября 2019

Я ссылаюсь на следующий код, но мне трудно получить доступ к n-му элементу многомерного массива. Пожалуйста, посмотрите следующий код для минимального рабочего примера: последний файл console.log возвращает значение «undefined», когда я ожидаю, что он вернет 1.

var intervaldefinitions = [
    [0,  "Unison", "Unison"],
    [1,  "m2",     "minor second"],
    [2,  "M2",     "Major second"],
    [3,  "m3",     "minor third"],
    [4,  "M3",     "Major third"],
    [5,  "P4",     "Perfect fourth"],
    [6,  "TT",     "Tritone"],
    [7,  "P5",     "Perfect Fifth"],
    [8,  "m6",     "minor sixth"],
    [9,  "M6",     "Major sixth"],
    [10, "m7",     "minor seventh"],
    [11, "M7",     "Major seventh"],
    [12, "Octave", "Octave"]
];

function intervalnametonumber(interval)
{
     var i = 0;
     for(i = 0; i < 13; i++)
     {
         if(intervaldefinitions[i][2] === interval)
              var intervalnumber = intervaldefinitions[i][0];
              return intervalnumber;
     }
}
    
console.log(intervalnametonumber("Unison"))
//Returns 0

console.log(intervalnametonumber("minor second"))
//Returns undefined, whereas I would expect it to return 1

Ответы [ 2 ]

3 голосов
/ 01 ноября 2019

В вашем выражении if есть две строки кодов, поэтому вам нужно обернуть их в {}. Если это одна строка, то {} необязательны.

Так что либо -

if(intervaldefinitions[i][2] === interval) {
  var intervalnumber = intervaldefinitions[i][0];
  return intervalnumber;
}

ИЛИ

if(intervaldefinitions[i][2] === interval)
  return intervaldefinitions[i][0];

Рабочий код -

  var intervaldefinitions = [
  [0, "Unison", "Unison"],
  [1, "m2", "minor second"],
  [2, "M2", "Major second"],
  [3, "m3", "minor third"],
  [4, "M3", "Major third"],
  [5, "P4", "Perfect fourth"],
  [6, "TT", "Tritone"],
  [7, "P5", "Perfect Fifth"],
  [8, "m6", "minor sixth"],
  [9, "M6", "Major sixth"],
  [10, "m7", "minor seventh"],
  [11, "M7", "Major seventh"],
  [12, "Octave", "Octave"]];

function intervalnametonumber(interval)
{
     for(var i=0; i<13;i++) {
       // console.log(intervaldefinitions[i][2])
         if(intervaldefinitions[i][2] === interval) {
              var intervalnumber = intervaldefinitions[i][0];
              return intervalnumber;
         }  
     }
}

console.log(intervalnametonumber("Unison"))

//Returns 0

console.log(intervalnametonumber("minor second"))

//Returns undefined, whereas I would expect it to return 1
3 голосов
/ 01 ноября 2019

Проблема заключалась в том, что вы возвращаетесь к началу в первом цикле, но вам нужно только вернуться к найденному значению.

function intervalnametonumber(interval) {
    var i = 0;
    for (i = 0; i < 13; i++) {
        if (intervaldefinitions[i][2] === interval)
            return intervaldefinitions[i][0];
    }
}

var intervaldefinitions = [[0, "Unison", "Unison"], [1, "m2", "minor second"], [2, "M2", "Major second"], [3, "m3", "minor third"], [4, "M3", "Major third"], [5, "P4", "Perfect fourth"], [6, "TT", "Tritone"], [7, "P5", "Perfect Fifth"], [8, "m6", "minor sixth"], [9, "M6", "Major sixth"], [10, "m7", "minor seventh"], [11, "M7", "Major seventh"], [12, "Octave", "Octave"]];

console.log(intervalnametonumber("Unison"));
console.log(intervalnametonumber("minor second"));
...