【问题标题】:Converting object to another object将对象转换为另一个对象
【发布时间】:2021-08-14 08:56:18
【问题描述】:

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

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

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

非常感谢, 纳库尔

【问题讨论】:

  • velocity 是一个常数值(0.7)吗?你会从previousNote' field? How is the structure of block`对象中得到note.alpha吗?是不是像{block : elapsedTime, note:{alpha:1,octave:1}
  • 如果所有对象都具有相同的block.elapsedTime 值,为什么它们的输出不同? note 中没有 alphaoctave 属性
  • @RajdeepDebnath,note 类扩展了 block 类。 .alpha 是一个实例 getter 方法,它在块级别从较低的位置检索数据。它的有效载荷比我打印的还要丰富。
  • @adiga,我的意思是上面列出的有效负载描述了对象的签名,而不是对象数组。对象数组中的每个对象都有不同的经过时间值。
  • @NakulTiruviluamala 所以note 类扩展block 类,那么注释对象将具有elapsedTime 属性。所以返回的对象可以是{time: note.elapsedTime, note: '${}${}'}

标签: javascript object type-conversion


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 但是他怎么会得到block.elapsedTime?看起来它没有被传递给箭头函数?
  • block 变量在map 回调函数范围内可见
  • 那么block.elapsedTime 在每次迭代中总是保持不变?我的意思是如果block.elapsedTime 与不同的note 不同,那么返回的对象将不会捕获它。
  • 是的。但在提供者示例中,它看起来像一个常量。
  • 有效!再次感谢:[{时间:0,注:'C4'},{时间:0,注:'C4'},{时间:250,注:'D4'},{时间:250,注:'F4' },{时间:250,注:'A4'},{时间:500,注:'E4'},{时间:500,注:'G4'},{时间:500,注:'B4'}, {时间:750,注:'F4'},{时间:750,注:'F4'}]
猜你喜欢
  • 2017-10-15
  • 2015-09-03
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 2013-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多