JavaScript "If Statement" 没有返回真值
JavaScript "If Statement" not returning true value
我编写了一个简单的函数,通过遍历数组并比较值来检查提供的注释是否有效。
代码总是 returns false
我不确定为什么?
当我 运行 代码 item.split("/")[1] == note
孤立时 returns 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"));
forEach
忽略由其回调编辑的任何值 return。而是使用 for
循环,这样 return
将 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"));
从 forEach()
回调返回只是继续循环,它不会 return 从 isValidNote()
函数返回。
使用 some()
而不是 forEach()
。如果任何回调 return 为真,则它 return 为真。
您还可以使用 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"));
我编写了一个简单的函数,通过遍历数组并比较值来检查提供的注释是否有效。
代码总是 returns false
我不确定为什么?
当我 运行 代码 item.split("/")[1] == note
孤立时 returns 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"));
forEach
忽略由其回调编辑的任何值 return。而是使用 for
循环,这样 return
将 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"));
从 forEach()
回调返回只是继续循环,它不会 return 从 isValidNote()
函数返回。
使用 some()
而不是 forEach()
。如果任何回调 return 为真,则它 return 为真。
您还可以使用 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"));