首页 > 解决方案 > 将对象转换为另一个对象

问题描述

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

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}`])

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

非常感谢,纳库尔

标签: javascriptobjecttype-conversion

解决方案


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

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

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

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

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


推荐阅读