基于Javascript中的其他信息填充数组的最有效方法是什么?
我有一个名为NoteArray的数组,在Javascript中大小为16。我还有一个名为NoteToNumberMapping的静态2D数组,大小为11x12。现在,作为输入,我让用户选择12个标准注释C-C-D-D-E-F-F-G-G-A-A-B的任意组合,或者根本不选择。e、 注:如有必要,注释可能会出现故障,例如D A C 对于CG示例,我想参考2D数组,看到在倍频程0中,C、G和G的对应数字是0、7和8。同样,对于倍频程1,数字是12、19和20。按照这种方式,前16个数字是:0、7、8、12、19、20、24、31、32、36、43、44、48、55、56、60 我想将这16个数字分配给我的初始NoteArray 我的方法基于Javascript中的其他信息填充数组的最有效方法是什么?,javascript,arrays,Javascript,Arrays,我有一个名为NoteArray的数组,在Javascript中大小为16。我还有一个名为NoteToNumberMapping的静态2D数组,大小为11x12。现在,作为输入,我让用户选择12个标准注释C-C-D-D-E-F-F-G-G-A-A-B的任意组合,或者根本不选择。e、 注:如有必要,注释可能会出现故障,例如D A C 对于CG示例,我想参考2D数组,看到在倍频程0中,C、G和G的对应数字是0、7和8。同样,对于倍频程1,数字是12、19和20。按照这种方式,前16个数字是:0、7、8
我将2D数组实现为包含128个项目的1D数组,其中包含字母。因此,项目0是C0,项目1一直是C0,直到项目127 G10。我想利用2D表格中的值是1-127之间的线性级数这一事实。但我最终得到了3个嵌套for循环,仍然无法让它工作。在Javascript中实现这一点的有效方法是什么?您应该能够以线性时间复杂度实现这一点。您应该使用对象来存储二维阵列,如下所示:
my2dArray = {
"0C": 0,
"0C#": 1,
"0D": 2,
...
}
var notes = [];
while(notes.length < 16) {
notes.push(Math.floor(notes.length / relativeNoteNumbers.length) * 12 +
relativeNoteNumbers[notes.length % relativeNoteNumbers.length]);
}
然后,您将不必迭代二维数组以获得所需的贴图值。您只需执行my2dArray[myKey],这有一个恒定的查找时间。您应该能够以线性时间复杂度执行此操作。您应该使用对象来存储二维阵列,如下所示:
my2dArray = {
"0C": 0,
"0C#": 1,
"0D": 2,
...
}
var notes = [];
while(notes.length < 16) {
notes.push(Math.floor(notes.length / relativeNoteNumbers.length) * 12 +
relativeNoteNumbers[notes.length % relativeNoteNumbers.length]);
}
然后,您将不必迭代二维数组以获得所需的贴图值。您只需执行my2dArray[myKey],这有一个恒定的查找时间。您应该能够以线性时间复杂度执行此操作。您应该使用对象来存储二维阵列,如下所示:
my2dArray = {
"0C": 0,
"0C#": 1,
"0D": 2,
...
}
var notes = [];
while(notes.length < 16) {
notes.push(Math.floor(notes.length / relativeNoteNumbers.length) * 12 +
relativeNoteNumbers[notes.length % relativeNoteNumbers.length]);
}
然后,您将不必迭代二维数组以获得所需的贴图值。您只需执行my2dArray[myKey],这有一个恒定的查找时间。您应该能够以线性时间复杂度执行此操作。您应该使用对象来存储二维阵列,如下所示:
my2dArray = {
"0C": 0,
"0C#": 1,
"0D": 2,
...
}
var notes = [];
while(notes.length < 16) {
notes.push(Math.floor(notes.length / relativeNoteNumbers.length) * 12 +
relativeNoteNumbers[notes.length % relativeNoteNumbers.length]);
}
然后,您将不必迭代二维数组以获得所需的贴图值。您只需执行my2dArray[myKey],这有一个固定的查找时间。您可以首先创建一个从注释名称到相对注释编号的查找表:
var relativeNoteNumberTable = {
'C': 0, 'C#': 1, 'D': 2, 'D#': 3, 'E': 4, 'F': 5, 'F#': 6,
'G': 7, 'G#': 8, 'A': 9, 'A#': 10, 'B': 11
};
然后,您可以相对轻松地获取所选注释的相对注释编号:
var selectedNotes = 'C G G#';
var relativeNoteNumbers = selectedNotes.split(' ')
.filter(function(note) { return note }) // remove blanks
.map(function(note) { return relativeNoteNumberTable[note] });
console.log(relativeNoteNumbers); // [0, 7, 8]
然后观察每八度,MIDI音符数增加12。如果您希望每个八度都有这些音符,直到有16个音符,您可以这样做:
my2dArray = {
"0C": 0,
"0C#": 1,
"0D": 2,
...
}
var notes = [];
while(notes.length < 16) {
notes.push(Math.floor(notes.length / relativeNoteNumbers.length) * 12 +
relativeNoteNumbers[notes.length % relativeNoteNumbers.length]);
}
您可以首先创建从注释名称到相对注释编号的查找表:
var relativeNoteNumberTable = {
'C': 0, 'C#': 1, 'D': 2, 'D#': 3, 'E': 4, 'F': 5, 'F#': 6,
'G': 7, 'G#': 8, 'A': 9, 'A#': 10, 'B': 11
};
然后,您可以相对轻松地获取所选注释的相对注释编号:
var selectedNotes = 'C G G#';
var relativeNoteNumbers = selectedNotes.split(' ')
.filter(function(note) { return note }) // remove blanks
.map(function(note) { return relativeNoteNumberTable[note] });
console.log(relativeNoteNumbers); // [0, 7, 8]
然后观察每八度,MIDI音符数增加12。如果您希望每个八度都有这些音符,直到有16个音符,您可以这样做:
my2dArray = {
"0C": 0,
"0C#": 1,
"0D": 2,
...
}
var notes = [];
while(notes.length < 16) {
notes.push(Math.floor(notes.length / relativeNoteNumbers.length) * 12 +
relativeNoteNumbers[notes.length % relativeNoteNumbers.length]);
}
您可以首先创建从注释名称到相对注释编号的查找表:
var relativeNoteNumberTable = {
'C': 0, 'C#': 1, 'D': 2, 'D#': 3, 'E': 4, 'F': 5, 'F#': 6,
'G': 7, 'G#': 8, 'A': 9, 'A#': 10, 'B': 11
};
然后,您可以相对轻松地获取所选注释的相对注释编号:
var selectedNotes = 'C G G#';
var relativeNoteNumbers = selectedNotes.split(' ')
.filter(function(note) { return note }) // remove blanks
.map(function(note) { return relativeNoteNumberTable[note] });
console.log(relativeNoteNumbers); // [0, 7, 8]
然后观察每八度,MIDI音符数增加12。如果您希望每个八度都有这些音符,直到有16个音符,您可以这样做:
my2dArray = {
"0C": 0,
"0C#": 1,
"0D": 2,
...
}
var notes = [];
while(notes.length < 16) {
notes.push(Math.floor(notes.length / relativeNoteNumbers.length) * 12 +
relativeNoteNumbers[notes.length % relativeNoteNumbers.length]);
}
您可以首先创建从注释名称到相对注释编号的查找表:
var relativeNoteNumberTable = {
'C': 0, 'C#': 1, 'D': 2, 'D#': 3, 'E': 4, 'F': 5, 'F#': 6,
'G': 7, 'G#': 8, 'A': 9, 'A#': 10, 'B': 11
};
然后,您可以相对轻松地获取所选注释的相对注释编号:
var selectedNotes = 'C G G#';
var relativeNoteNumbers = selectedNotes.split(' ')
.filter(function(note) { return note }) // remove blanks
.map(function(note) { return relativeNoteNumberTable[note] });
console.log(relativeNoteNumbers); // [0, 7, 8]
然后观察每八度,MIDI音符数增加12。如果您希望每个八度都有这些音符,直到有16个音符,您可以这样做:
my2dArray = {
"0C": 0,
"0C#": 1,
"0D": 2,
...
}
var notes = [];
while(notes.length < 16) {
notes.push(Math.floor(notes.length / relativeNoteNumbers.length) * 12 +
relativeNoteNumbers[notes.length % relativeNoteNumbers.length]);
}
请用3个嵌套的for loops粘贴代码请用3个嵌套的for loops粘贴代码请用3个嵌套的for loops粘贴代码请用3个嵌套的for loops粘贴代码太多了。这是jQuery代码吗?恐怕我不能使用jQuery,因为我正在用Javascript编写WinRT应用程序:@Freakishly:Nope;这是纯JavaScript。非常感谢。这是jQuery代码吗?恐怕我不能使用jQuery,因为我正在用Javascript编写WinRT应用程序:@Freakishly:Nope;这是纯JavaScript。非常感谢。这是jQuery代码吗?恐怕我不能使用jQuery,因为我正在用Javascript编写WinRT应用程序:@Freakishly:Nope;这是纯JavaScript。非常感谢。这是jQuery代码吗?恐怕我不能使用jQuery,因为我正在用Javascript编写WinRT应用程序:@Freakishly:Nope;这是纯JavaScript。