Javascript d3 reduce方法返回NaN
更新: 添加,我更新了此帖子中的原始值以匹配。小提琴不工作,因为csv是外部的,但是我想不出来。但是,至少你可以看到代码 在我的机器上,控制台日志第52-54行显示:Javascript d3 reduce方法返回NaN,javascript,arrays,date,d3.js,reduce,Javascript,Arrays,Date,D3.js,Reduce,更新: 添加,我更新了此帖子中的原始值以匹配。小提琴不工作,因为csv是外部的,但是我想不出来。但是,至少你可以看到代码 在我的机器上,控制台日志第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。这几
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。这几乎就像我需要以某种方式识别没有数据的日期,或者:
频率阵列
cumulativeFrequencyArray
来显示它以前的索引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
值的文本(当我滑动到2014年10月21日时,文本显示“2”和“12”)。我是这样说的——“当滑块值等于dateArray
中的值时,显示频率数组
和累积频率数组
的相应索引
这非常有效,直到你滑到一个没有值的日期,比如2014年10月19日,它显示“NaN”和“NaN”。很好。因此,如果没有找到日期,将NaN设为零
frequencyArray[indexOfFormattedCurrentDate] = frequencyArray[indexOfFormattedCurrentDate] || 0;
但是,文本显示的不是“0”和“6”,而是“0”和“NaN”。它很好地为frequencyArray
文本设置了一个零,但仍然将NaN设置在cumulativeFrequencyArray
文本中
如何获取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
,我建议将日期解析为数字,而不是将其作为字符串处理您的控制台中是否有任何错误?我相信设置时,您将在赋值中得到无效的左侧
错误dates.indexOf(currentDate)=dates.indexOf(currentDate)| | | 0;
。你能提供剩下的代码吗?更好的是,a?谢谢@Dom。不,没有控制台错误。请参阅上面的更新。谢谢!请不要有“更新”“节。这使得阅读这篇文章很困难。把它全部重写成一篇连贯的文章。谢谢你的洞察力。好的,我应该把日期解析成数字,那样会更好!如果我这样做了,我现在想知道的是是否会更好。我想从中构建时间序列图形,所以在第一次和最后一次之间的每个日期都有一个值是理想的。在这种情况下,csv是20000行。那么,这有意义吗?这不是原始问题的一部分,但它实际上取决于你需要做什么,如果你不关心额外的空间,你可以为一个不在行中的日期使用一个空元素,或者使用二进制搜索找到一天的位置谢谢。是的,抱歉,这是一个附加问题。我会看看你建议的那些选项,如果我有更多的问题,我会写另一篇文章。你确实回答了我原来的问题,所以我把它标记为已回答。非常感谢!