当前位置: 代码迷 >> JavaScript >> Javascript(D3)循环优化
  详细解决方案

Javascript(D3)循环优化

热度:22   发布时间:2023-06-05 11:44:46.0

我正在尝试预处理一些数据。 虽然我的方法行得通,但感觉确实很脏。

    // Calculate dataset mean
    var mean = Math.round(d3.mean(data, function(d) { return d.value; }));

        // Iterate through data reformatting dates and centering data around the mean
        data.forEach(function(d) {
                parseDate = d3.time.format("%Y-%m-%d").parse;
                d.date = parseDate(d.date);
                d.value = Math.round(+d.value - mean);
        });

   var data = data.map(function(obj) { return [obj.date.getTime(), obj.value]; });

我实际上是遍历数据集三次。

首先,计算平均值(仅在下一个循环中使用)。

其次,重新格式化日期字符串,并使数据围绕均值居中。

第三,将日期字符串转换为日期对象(纪元时间)。

与遍历数据集三遍相比,我有一种更有效的方法。

我如何合并这些循环?

好吧,您需要在第二次迭代中获得均值,因此无法绕开第一次迭代。 您可以轻松地将迭代2和3组合在一起:

var parseDate = d3.time.format("%Y-%m-%d").parse;
var data = data.map(function(d) {
  d.date = parseDate(d.date);
  d.value = Math.round(+d.value - mean);
  return [d.date.getTime(), d.value];
});

除非data非常大(至少数千个项目),否则不会使其效率明显提高。

  相关解决方案