【发布时间】:2021-06-02 22:42:42
【问题描述】:
我有一个具有如下属性的对象:
{
maj6: { chromatic: [ 0, 4, 7, 9 ] },
min6: { chromatic: [ 0, 3, 7, 9 ] },
maj7: { chromatic: [ 0, 4, 7, 11 ] },
min7: { chromatic: [ 0, 3, 7, 10 ] },
minmaj7: { chromatic: [ 0, 3, 7, 11 ] },
dom7: { chromatic: [ 0, 4, 7, 10 ] },
maj9: { chromatic: [ 0, 4, 7, 11, 14 ] },
dom9: { chromatic: [ 0, 4, 7, 10, 14 ] },
maj: { chromatic: [ 0, 4, 7 ] },
min: { chromatic: [ 0, 3, 7 ] },
aug: { chromatic: [ 0, 4, 8 ] },
dim: { chromatic: [ 0, 3, 6 ] }
}
我正在计算一个数组,例如 [0,4,7],我试图将其与上述对象属性之一匹配。我正在尝试使用 find 函数来实现这一点,如以下代码 sn-p 所示:
matchParsedToChord() {
const result = this.blocks //returns larger payload
.map(block => block.chromatic) // returns array [0,4,7,4,7,7,7,4]
.filter((v,i,arr) => arr.indexOf(v) === i) //removes redundancies [0,4,7]
.find(v => { //attempts to
v === Object.keys(chordDefinitions).map(key => chordDefinitions[key].chromatic)
})
console.log(result)
}
我的问题是 Object.keys 逻辑返回整个数组,而我想逐个元素进行比较。
我想返回数组关联的对象属性,例如:
maj: { chromatic: [ 0, 4, 7 ] }
非常感谢
【问题讨论】:
-
您的预期结果是什么?
-
你看过lodash吗?
_.findKey函数可能正是您想要的。 -
@Nakul - 这些解决方案是否解决了您的问题?如果是这样,请接受答案。如果没有,请回复为什么不这样我们可以提供帮助。干杯。
标签: javascript object find higher-order-functions