将对象转换为另一个对象

时间:2021-05-26 06:12:44

标签: javascript object type-conversion

我有一个这个签名的对象数组:

Note {
      _payload: [Object],
      blockText: 'ti',
      measure: [Measure],
      entries: [Array],
      start: 500,
      voiceId: undefined,
      octaveModifier: 0,
      previousNote: [Note],
      firstNoteOfPreviousBlock: [Chord],
      isTied: undefined,
      currentSubgroup: undefined,
      userInput: 'do refala misoti fa',
      crescendoIndex: undefined,
      chord: [Chord],
      _duration: 250
    }

API 中有一些 getter 函数,它们允许我访问特定的对象属性,例如: block.elapsedTime(“时间”值)和 ${note.alpha}${note.octave}(“注释”值)。

最终,我正在尝试遍历对象列表,以便可以以这种格式返回带有时间和音符值的对象:

[
 {time: 0, note: 'C4', velocity: 0.7 },
 {time: 250, note: 'D4', velocity: 0.7}
 {time: 250, note: 'F4', velocity: 0.7}
 {time: 250, note: 'A4', velocity: 0.7}
 {time: 500, note: 'E4', velocity: 0.7}
 {time: 500, note: 'G4', velocity: 0.7}
 {time: 500, note: 'B4', velocity: 0.7}
 {time: 750, note: 'F4', velocity: 0.7}
] 

我尝试以这种方式使用地图: block.entries.map(note => [block.elapsedTime, `${note.alpha}${note.octave}`])

但这返回数组而不是对象。

非常感谢, 纳库尔

1 个答案:

答案 0 :(得分:1)

Array.prototype.map() 返回从回调函数返回的元素数组。在您的情况下,它是一个数组:

[block.elapsedTime, `${note.alpha}${note.octave}`]

你应该返回一个对象而不是这样的数组:

block.entries.map((note) => ({
    time: block.elapsedTime,
    note: `${note.alpha}${note.octave}`
  })
);

您可以在对象内添加任何必填字段。

相关问题