我有这个对象
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。我只想要两个元素。请参阅问题中的数据结构。在通过你的建议后我也有调试控制台的快照。正如您所看到的那样,数据结构与我想要的数据结构不同。
答案 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);
});
希望这对你有用!