我编写了一个简单的函数,通过遍历数组和比较值来检查所提供的注释是否有效。
代码总是返回false,我不知道为什么?
当我孤立地运行代码item.split("/")[1] == note时,它返回true (注释= "C“),那么为什么我的函数总是返回false
const chromatic = ["A", "A#/Bb", "B/Cb", "B#/C", "C#/Db", "D", "D#/Eb", "E", "E#/Fb", "F", "F#/Gb", "G", "G#/Ab"];
const isValidNote = (note) => {
chromatic.forEach((item) => {
if (item.split("/").length > 1) {
console.log(item.split("/")[1] == note); // logs true on 3rd iteration
if (item.split("/")[0] == note) return true;
if (item.split("/")[1] == note) return true;
} else if (item == note) {
return true;
}
});
return false;
}
console.log(isValidNote("C"));
发布于 2020-11-20 23:12:31
forEach忽略其回调返回的任何值。使用for循环,这样return将返回到isValidNote的调用方,而不是被forEach忽略
const chromatic = ["A", "A#/Bb", "B/Cb", "B#/C", "C#/Db", "D", "D#/Eb", "E", "E#/Fb", "F", "F#/Gb", "G", "G#/Ab" ];
const isValidNote = (note)=> {
for (const item of chromatic) {
if(item.split("/").length > 1){
if(item.split("/")[0] == note) return true;
if(item.split("/")[1] == note) return true;
}
else if(item == note){
return true;
}
}
return false;
}
console.log(isValidNote("C"));
或者,更简单地说:
const chromatic = ["A", "A#/Bb", "B/Cb", "B#/C", "C#/Db", "D", "D#/Eb", "E", "E#/Fb", "F", "F#/Gb", "G", "G#/Ab" ];
const isValidNote = (note)=> {
for (const item of chromatic) {
const allNotes = item.split("/");
if (allNotes.includes(note)) {
return true;
}
}
return false;
}
console.log(isValidNote("C"));
或使用.some
const chromatic = ["A", "A#/Bb", "B/Cb", "B#/C", "C#/Db", "D", "D#/Eb", "E", "E#/Fb", "F", "F#/Gb", "G", "G#/Ab" ];
const isValidNote = note => chromatic.some(
item => item.split("/").includes(note)
);
console.log(isValidNote("C"));
发布于 2020-11-20 23:14:05
从forEach()回调返回只会继续循环,它不会从isValidNote()函数返回。
使用some()而不是forEach()。如果任何回调返回true,则返回true。
您还可以使用includes()简化回调内部的条件。
const chromatic = ["A", "A#/Bb", "B/Cb", "B#/C", "C#/Db", "D", "D#/Eb", "E", "E#/Fb", "F", "F#/Gb", "G", "G#/Ab"];
const isValidNote = note => chromatic.some(item => item.split("/").includes(note));
console.log(isValidNote("C"));
https://stackoverflow.com/questions/64938124
复制相似问题