JavaScript";“如果声明”;不返回真值

JavaScript";“如果声明”;不返回真值,javascript,arrays,if-statement,foreach,boolean,Javascript,Arrays,If Statement,Foreach,Boolean,我编写了一个简单的函数,通过在数组上循环并比较值来检查提供的注释是否有效 代码总是返回false,我不确定为什么 当我单独运行代码项.split(“/”[1]==note时,它返回true(带note=“C”),那么为什么我的函数总是返回false const colormac=[“A”、“A/Bb”、“B/Cb”、“B/C”、“C/Db”、“D”、“D/Eb”、“E”、“E/Fb”、“F”、“F/Gb”、“G”、“G/Ab”]; 常量isValidNote=(注意)=>{ 彩色字体((项目)

我编写了一个简单的函数,通过在数组上循环并比较值来检查提供的注释是否有效

代码总是返回
false
,我不确定为什么

当我单独运行代码
项.split(“/”[1]==note
时,它返回
true
(带note=“C”),那么为什么我的函数总是返回
false

const colormac=[“A”、“A/Bb”、“B/Cb”、“B/C”、“C/Db”、“D”、“D/Eb”、“E”、“E/Fb”、“F”、“F/Gb”、“G”、“G/Ab”];
常量isValidNote=(注意)=>{
彩色字体((项目)=>{
如果(项目拆分(“/”)。长度>1){
console.log(item.split(“/”[1]==note);//在第三次迭代时记录true
如果(item.split(“/”[0]==note)返回true;
如果(item.split(“/”[1]==note)返回true;
}否则如果(项目==注释){
返回true;
}
});
返回false;
}

控制台日志(isValidNote(“C”)
forEach
忽略其回调返回的任何值。改用
for
循环,这样
return
将返回到
isValidNote
的调用者,而不是被
forEach
忽略:

const colormac=[“A”、“A/Bb”、“B/Cb”、“B/C”、“C/Db”、“D”、“D/Eb”、“E”、“E/Fb”、“F”、“F/Gb”、“G”、“G/Ab”];
常量isValidNote=(注意)=>{
用于(彩色的常量项){
如果(项目拆分(“/”)。长度>1){
如果(item.split(“/”[0]==note)返回true;
如果(item.split(“/”[1]==note)返回true;
}
否则如果(项目==注释){
返回true;
}
}
返回false;
}

控制台日志(isValidNote(“C”)
forEach()
回调返回只是继续循环,而不是从
isValidNote()函数返回

使用
some()
而不是
forEach()
。如果任何回调返回true,则返回true

您还可以使用
includes()
简化回调中的条件

const colormac=[“A”、“A/Bb”、“B/Cb”、“B/C”、“C/Db”、“D”、“D/Eb”、“E”、“E/Fb”、“F”、“F/Gb”、“G”、“G/Ab”];
const isValidNote=note=>color.some(item=>item.split(“/”)。包括(note));
控制台日志(isValidNote(“C”)