Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于Javascript中的其他信息填充数组的最有效方法是什么?_Javascript_Arrays - Fatal编程技术网

基于Javascript中的其他信息填充数组的最有效方法是什么?

基于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

我有一个名为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

我的方法


我将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。