我正在开发一个简单的网络应用程序,基本上可以让吉他手根据他们投诉警察课的位置来转换和弦--你不必真的知道这意味着什么,但如果你这样做可能会有所帮助。我让它工作在一个单一和弦的条目,但我希望用户能够输入多个和弦来转换,所以他们的目标是输入多个和弦,将存储在一个数组中。在那里,我为每个可能的和弦预先设置了一个字符数组,并且我编写了一个嵌套循环函数来搜索可能的和弦数组,以便它们能够返回该可能和弦的索引数。
let chordShapes = ["E", "F", "F# / Gb", "G", "G# / Ab", "A", "A# / Bb",
"B", "C", "C# / Db", "D", "D# / Eb"];例如,用户输入和弦A和E,它们将被输入到一个名为inpArr的数组中。从那里开始,我希望函数返回一个名为inputChords的数组中匹配和弦的索引,所以在这个例子中,新数组应该在这个函数之后是5,0,从那里我应该能够完成这个过程。但是,我得到的错误是,函数中没有定义indexOf。下面是与相关数组一起的函数:
let inputChords = ["A", "E"];
function findNums(inpArr){
let newArr = [];
for(let i=0; i<inpArr.length-1; i++){
for(let j=0; j<chordShapes.length-1; j++){
if(inpArr[i]==chordShapes[j]){
newArr[i] = indexOf(chordShapes[j]);
console.log(`inputNum: ${newArr[i]}`);
}
}
return newArr;
}
};
findNums(inputChords);我从其他答案中可以看出,差异可能是因为indexOf用于字符串和数组(我知道字符串是一种数组类型),但这两者都是肯定的。我看到的所有其他问题似乎都是关于超出我专长的程序,所以我不知道如何应用他们的解决方案来解决我自己的问题。如能提供任何帮助,将不胜感激:)
发布于 2022-07-15 23:35:50
似乎有一个排版错误,其中indexOf应该是cordShapes.indexOf。但是,解决这个问题并不能解决与对同一和弦使用不同附加值的密钥签名相关的问题,并且确实需要用户准确地使用shift键。
一种方法可以是降低大小写用户的输入,并使用查找对象进行密钥签名。例如:
const chordShapes = {
"e": 0, "f": 1,"f#": 2,"gb": 2,"g": 3, "g#": 4,"ab":4 ,"a": 5, "a#": 6,
"bb": 6,"b": 7,"c": 8, "c#": 9,"db": 9,"d": 10,"d#": 11,"eb": 11
};
let inputChords = ["A", "E"];
function findNums(inpArr){
return inpArr.map( signature=> chordShapes[ signature.toLowerCase()] );
}
console.log( findNums(inputChords) );
这仍然是过于简单-您可能需要验证和分类的和弦名称,然后查找索引为他们的表格。目的是分别确定和弦的半单位偏移E,和弦的变化(即大调/小调,缩小,增广,6,7,9等)或如果和弦表示法不支持。
https://stackoverflow.com/questions/73000466
复制相似问题