【问题标题】:Extract Array values into object dynamically动态地将数组值提取到对象中
【发布时间】:2017-03-03 01:31:53
【问题描述】:

我想创建一个复制此对象架构值的算法(此处为示例数据):

let layer1 = {name: 'x',
          values: [{_color: '#996666', time: 0, tween: 'quadEaseIn', value: 0},
                   {_color: '#b074a0', time: 4, value: 5.500023},
                   {_color: '#b074a0', time: 3, value: 4.500023},
                   {_color: '#b074a0', time: 2, value: 3.500023}],
          tmpValue: 3.500023,
          _color: '#6ee167',
          _value: 0};

该样本数据的第 3、4、5 行与问题相关。

那么下面是目前为止的算法。变量 numKeyframes 已定义 (n)。在第一个循环中,动态对象被添加到称为关键帧的数组中。

在第二个循环中,关键帧数组包含在图层对象中。这里的想法是关键帧应该插入多个对象来代替它所在的对象(就像上面的示例对象数据一样)。

  ...
  var keyframes = [];
  var timevals = [1, 2, 3, 4, 5]
  for (var k=0; k<numKeyframes; k++) {
    var tv = timevals[k];
    var kf = {_color: '#FF0000', time: tv, value: 3.500023}
    keyframes.push(kf);
  }

  // make x, y, z layers
  for (var i=0; i<3; i++) {
    layer =  {name: layerNames[i],
              values: [{_color: layerValuesColors[i],
                        time: layerValuesTime[i],
                        tween: 'quadEaseIn',
                        value: layerValuesValues[i]},
                        keyframes],
              tmpValue: layertmpValues[i],
              _color: layerColors2[i],
              _value: layerValues[i]}
    layerData.push(layer);
  }
  ...

但这不起作用。似乎没有包含任何对象。

如果我用 keyframes[0]] 替换 keyframes],那么它可以工作,但是当所有值(对象)需要插入时,它当然只会获取第一个值(对象)。

最好的方法是什么?

【问题讨论】:

    标签: javascript arrays loops dynamic-programming javascript-objects


    【解决方案1】:

    我认为你的代码没有任何错误,只是使用console.dir函数检查数据结构如下

    console.dir(layerData);
    

    【讨论】:

    • 正确,没有错误,并且 console.dir(layerData) 确实显示了对象 ([object Object],[object Object],[object Object]) ...但它是其中的关键帧layerData 我有如何正确解析它的问题
    • 好的,我刚试过这个:console.dir("layerData: " + JSON.stringify(layerData));
    • 这确实表明关键帧对象正在嵌套。例如,这是其中之一:
    • [{"name":"x","values":[{"_color":"#996666","time":0,"tween":"quadEaseIn","value" :0},[{"_color":"#FF0000","time":1,"value":3.500023},{"_color":"#FF0000","time":2,"value":3.500023} ,{"_color":"#FF0000","time":3,"value":3.500023}]],"tmpValue":3.500023,"_color":"#6ee167","_value":0},跨度>
    • 但是为什么要在对象键周围加上引号呢?例如“值”和“时间”:2?这需要与我在帖子顶部显示的示例数据完全相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多