根据两个属性查找对象的键

时间:2020-09-25 20:16:25

标签: javascript find

现在,我可以通过搜索音符的频率来找到音符列表的对象键:

let key = noteKeys.find(k=>note[k]['freq']===freq);

每个音符都有自己独特的频率,因此这是一个问题。

但是要说我是否要基于笔记字母值(一个数字)和一个八度来在笔记对象中找到对象键?

我以为会是这样,但这给了我错误“参数列表格式错误”:

let key = noteKeys.find(k=>note[k]['note']===newNote && k=>note[k]['octave']===currentOctave)

2 个答案:

答案 0 :(得分:2)

=>是将参数与arrow functions的功能主体分开的部分。

由于错误的参数列表,在表达式内部会引发错误。

let key = noteKeys.find(k =>
        note[k]['note'] === newNote && note[k]['octave'] === currentOctave
    );

短一点

let key = noteKeys.find(k => 
        note[k].note === newNote && note[k].octave === currentOctave
    );

答案 1 :(得分:1)

=>之后的所有内容都是函数主体,在这种情况下(由于没有大括号表示一个块)也是该函数的返回表达式。

通过执行&& k=> ...,您正在创建一个新的匿名函数,其布尔表达式中的真实性始终为真。

删除第二个k =>,您将拥有一个布尔表达式,该布尔表达式同时声明note[k]['note']===newNotenote[k]['octave']===currentOctave

let key = noteKeys.find(k=>note[k]['note']===newNote && note[k]['octave']===currentOctave)

或者,或者更容易理解:

let key = noteKeys.find(k=> {
  return note[k]['note'] === newNote && note[k]['octave'] === currentOctave)
})

作为后续,您应该阅读箭头功能和布尔表达式。