Javascript (D3) 循环优化

标签 javascript loops for-loop d3.js

我正在尝试预处理一些数据。虽然我的方法有效,但感觉很脏。

    // 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];
});

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

关于Javascript (D3) 循环优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31728016/

相关文章:

c# - Roslyn C# 为 for 语句重建不正确的表达式

c - 在 SDL2 C 中使用 for 循环显示矩形

c++ - 即使表达式为

javascript - 一页上多个简单图表 d3.js

javascript - 使用 JQuery 查找元素中的文本然后执行功能

javascript - 使用 gsap 动画背景位置

C 编程 While 循环赋值

string - 反转字符串范围

javascript - Angular Router 元素中的 CSS Center 元素

scala - 如何在Scala的for循环中跳过迭代?