javascript - 在 Javascript 中重新排列数据

标签 javascript d3.js reshape

我对 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/

相关文章:

javascript - 在父窗口上刷新子窗口

javascript - Angular Material 数据表未排序?

javascript - 如何使用 d3.js 根据数据确定 SVG 形状

javascript - 获取可缩放旭日中可见的根节点

R reshape 性能

r - 为什么在 R 中 reshape 时会返回警告?

javascript - 尝试使用 AJAX 和 PHP

javascript - 将图像轮播指示器添加到 jQuery 图像幻灯片而不需要 Bootstrap ?

javascript - 在D3中绘制分层圆弧

python - 如何 reshape ()numpy中奇数行和偶数行的总和