我正在尝试预处理一些数据。虽然我的方法有效,但感觉很脏。
// 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/