我不知道如何改进我的以下代码 - 它看起来有点难看:
我的数据是这样的:
date d1 d2 d3 d4 d5 d6
110522 5 1 3 5 0 7
110523 9 2 4 6 5 9
110524 0 0 0 0 1 0
110525 0 0 3 0 4 0
...
我使用 d3.js 从文本文件中读取数据,并希望生成具有以下结构的“完整”数组:
Array [ Array[10], Array[10], Array[10], Array[10], Array[10] ]
// 10 f.e. is the number of data rows in file
var final1=[];
var final2=[];
var final3=[];
var complete=[];
var dsv = d3.dsv(" ", "text/plain");
dsv("/data/file.txt", function(error, data) {
data.forEach(function(d) {
final1.push({x: d.date, y: d.d1});
final2.push({x: d.date, y: d.d2});
final3.push({x: d.date, y: d.d3});
...
complete.push(final1);
complete.push(final2);
complete.push(final3);
...
});
该代码有效!但非常费力。如何将数组组合成一个整体数组,而不需要绕道生成大量帮助数组(final1、final2、...)?
因此最终形成一个数组,如下所示:
var complete= [
[{'x':110522,'y':5},{'x':110523,'y':9},{'x':110524,'y':0}, ...],
[{'x':110522,'y':1},{'x':110523,'y':2},{'x':110524,'y':0}, ...],
...
];
请您参考如下方法:
使用 for...in loop动态迭代每个属性,而不是显式处理每个属性。
var data = [
{ date: 110522, d1: 5, d2: 1, d3: 3, d4: 5, d5: 0, d6: 7 },
{ date: 110523, d1: 9, d2: 2, d3: 4, d4: 6, d5: 5, d6: 9 },
{ date: 110524, d1: 0, d2: 0, d3: 0, d4: 0, d5: 1, d6: 0 },
{ date: 110525, d1: 0, d2: 0, d3: 3, d4: 0, d5: 4, d6: 0 }
];
var results = [];
data.forEach(function (d) {
var prop;
var resultIndex = 0;
for (prop in d) {
if (d.hasOwnProperty(prop) && prop !== 'date') {
if (!results[resultIndex]) {
results[resultIndex] = [];
}
results[resultIndex].push({
'x': d.date,
'y': d[prop]
});
resultIndex++;
}
}
});
//Output for demonstration purposes
var element = document.createElement('pre');
element.innerHTML = JSON.stringify(results, null, 4);
document.body.appendChild(element);