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。这几乎就像我需要以某种方式识别没有数据的日期,并且:
- 将零推入
frequencyArray
?
- 或者我需要
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];
我正在使用日期滑块显示 frequencyArray
和 cumulativeFrequencyArray
值的文本(当我滑动到 10/21/14 时,文本显示“2”和“ 12”)。我这样做是说 - “当滑块值等于 dateArray
中的值时,显示相应的 indexOf
frequencyArray
和 cumulativeFrequencyArray
.
在您滑动到一个没有值的日期(例如 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
,我建议将日期解析为数字而不是将它们作为字符串处理
更新: 添加了 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。这几乎就像我需要以某种方式识别没有数据的日期,并且:
- 将零推入
frequencyArray
? - 或者我需要
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];
我正在使用日期滑块显示 frequencyArray
和 cumulativeFrequencyArray
值的文本(当我滑动到 10/21/14 时,文本显示“2”和“ 12”)。我这样做是说 - “当滑块值等于 dateArray
中的值时,显示相应的 indexOf
frequencyArray
和 cumulativeFrequencyArray
.
在您滑动到一个没有值的日期(例如 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
,我建议将日期解析为数字而不是将它们作为字符串处理