d3 reduce 方法返回 NaN

d3 reduce method is returning NaN

更新: 添加了 JSFIDDLE, and I updated the original values in this posting to match. The fiddle is not working because the csv is external. I tried this,但无法弄清楚。但是,至少你可以看到代码。

在我的机器上,第 52-54 行的控制台日志显示:

dateArray ["10/17/0014", "10/18/0014", "10/20/0014", "10/21/0014"]
frequencyArray [3, 3, 4, 2]
cumulativeFrequencyArray [3, 6, 10, 12]

当滑块位于 2014 年 10 月 19 日时,我希望它显示 0 和 6。这几乎就像我需要以某种方式识别没有数据的日期,并且:

  1. 将零推入 frequencyArray?
  2. 或者我需要 cumulativeFrequencyArray 来显示它之前的索引?

我也不喜欢两次访问外部 csv 文件的方式,但这是另一个问题:)谢谢!

原文: 使用 D3,我有日期的 csv:

timeStamp
10/17/14 02:20:15 PM
10/17/14 08:22:35 AM
10/17/14 09:03:18 AM
10/18/14 02:20:15 PM
10/18/14 08:23:35 AM
10/18/14 09:03:18 AM
10/20/14 08:23:35 AM
10/20/14 10:23:35 AM
10/20/14 02:20:15 PM
10/20/14 02:03:18 AM
10/21/14 04:20:15 PM
10/21/14 09:03:18 AM

我正在制作一组找到的日期

dateArray = ['10/17/14', '10/18/14', '10/20/14', '10/21/14']

我正在计算找到的每个日期出现的次数并将它们放入另一个数组

frequencyArray = [3, 3, 4, 2];

我还在 frequencyArray 上使用 reduce() 来生成第三个先前和的数组

cumulativeFrequencyArray = [3, 6, 10, 12];

我正在使用日期滑块显示 frequencyArraycumulativeFrequencyArray 值的文本(当我滑动到 10/21/14 时,文本显示“2”和“ 12”)。我这样做是说 - “当滑块值等于 dateArray 中的值时,显示相应的 indexOf frequencyArraycumulativeFrequencyArray.

在您滑动到一个没有值的日期(例如 2014 年 10 月 19 日)之前,它一直有效,它显示 "NaN" 和 "NaN"。美好的。所以,如果没有找到日期,将 NaN 设置为零

frequencyArray[indexOfFormattedCurrentDate] = frequencyArray[indexOfFormattedCurrentDate] || 0;

但是,文本显示的不是“0”和“6”,而是“0”和 "NaN"。它很好地为 frequencyArray 文本放置了一个零,但仍然在 cumulativeFrequencyArray 文本中放置了 NaN。

如何获得 cumulativeFrequencyArray 文本来放置先前值的总和?

谢谢。

您得到 NaN 的原因如下:

var index = dateArray.indexOf('a date that does not exist')   // -1
var el = cumulativeFrequencyArray[index]                      // undefined 
thousandSeparator(el)     // 'NaN' note that it's a string 'NaN', not the numeric NaN

您应该进行线性搜索,直到找到元素或找到更大的日期而不是 indexOf,我建议将日期解析为数字而不是将它们作为字符串处理