Reputation: 565
I am referencing the following code but am having difficulty accessing the nth element of the multidimensional array. Please see the following code for a minimum working example, with the last console.log returning "undefined" when I would expect it to return 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
Upvotes: 0
Views: 126
Reputation: 26732
You have 2 line of codes inside your if
statement so you need to wrap it in {}
. If it is a single line then {}
are optional.
So Either -
if(intervaldefinitions[i][2] === interval) {
var intervalnumber = intervaldefinitions[i][0];
return intervalnumber;
}
OR
if(intervaldefinitions[i][2] === interval)
return intervaldefinitions[i][0];
Working Code -
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
Upvotes: 4
Reputation: 386660
The problem was, you return to early, in the first loop, but you need only to return on a found value.
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"));
Upvotes: 3