如何在javascript中将对象添加到对象数组

时间:2017-12-30 22:48:30

标签: javascript arrays

我有这个对象

chartData = {
  datasets: []
};

它用于存储Chart.js的数据集。我使用此代码从表单输入构建数据集:

formData[index].value.forEach(function (value, dataset_index) {
      let data = {};
      data[formData[index].name] = value;
      chartData.datasets[dataset_index] = data;
});

我希望chartData.datasets具有以下结构:

datasets: [{
      label: 'apples',
      data: [12, 19, 3, 17, 6, 3, 7],
      backgroundColor: "rgba(153,255,51,0.4)"
    }, {
      label: 'oranges',
      data: [2, 29, 5, 5, 2, 3, 10],
      backgroundColor: "rgba(255,153,0,0.4)"
    }]

使用调试器我看到了

"chartData.datasets[dataset_index] = data;"

在第一次循环迭代后覆盖chartData.datasets[dataset_index]处的值。

所以我认为“我需要将”数据“推送到数组对象上”。错误。当我尝试

chartData.datasets[dataset_index].push(data);

我得到了

  

TypeError:chartData.datasets [dataset_index]未定义

有人知道将“数据”对象添加到chartData.datasets数组的正确方法是什么?我已经尝试了所有符号的排列无济于事。我假设我无法使用Array方法,因为chartData.datasets[dataset_index]是一个对象?搜索结果证明没有结果。

更新 是的,我想过这个,但它不起作用。然后你得到带有四个数组元素的chartData.datasets。我只想要两个元素。请参阅问题中的数据结构。在通过你的建议后我也有调试控制台的快照。正如您所看到的那样,数据结构与我想要的数据结构不同。 Debug console

更新II: 这是表单输入的序列化数组的快照: enter image description here 希望这会有所帮助。

更新III: 这是formData [index] .value快照 formData[index].value

1 个答案:

答案 0 :(得分:4)

您需要将数据推送到datasets数组:

chartData.datasets.push(data)

根据我对你在这里描述的内容的理解是一个解决方案:

formData[index].value.forEach(function(value, dataset_index) {
  let data = {};
  data[formData[index].name] = value;
  chartData.datasets[dataset_index] = Object.assign(chartData.datasets[dataset_index] || {}, data);
});

希望这对你有用!