我对 Javascript 还很陌生。我的数据当前采用 csv 格式:
place, time, value
a, 2009, 25
b, 2009, 35
c, 2009, 14
a, 2010, 42
b, 2010, 13
etc.
我想以以下格式排列数据 [{'place': 'a', 'data':[{'t': '2009', 'v': '25'}, {' t': '2010' 等
这样我就可以在 d3 中制作一些折线图
我目前正在使用以下代码。然而,我觉得这是低效的,因为如果我有相当数量的数据(40 年中的 30 个地方),javascript 将对所有数据进行 30 次迭代。我还应该采取其他方法来解决这个问题吗?
var instlist = [{'place': 'a', 'data':[]}, {'place':'b', 'data':[]}];
var data = instlist;
for (var i = 0; i < placelist.length; i++){
for (var j = 0; j < rawData.length; j++){
if (rawData[j]['place'] == instlist[i]['place']) {
data[i]['data'].push({'t': rawData[j]['t'],'v': rawData[j]['v']})
}
}
}
谢谢。干杯
最佳答案
由于是D3题,所以D3解法比较简洁。如果您有单独的 CSV 文件,则可以使用 d3.csv
来加载它。
var csvString = [
'place,time,value',
'a,2009,25',
'b,2009,35',
'c,2009,14',
'a,2010,42',
'b,2010,13'
].join('\n');
var rows = d3.csv.parse(csvString);
var data = d3.nest()
.key(function(d)
{
return d.place;
})
.entries(rows);
console.log(data);
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
关于javascript - 在 Javascript 中重新排列数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26679252/