Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript d3 reduce方法返回NaN_Javascript_Arrays_Date_D3.js_Reduce - Fatal编程技术网

Javascript d3 reduce方法返回NaN

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。这几

更新: 添加,我更新了此帖子中的原始值以匹配。小提琴不工作,因为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。这几乎就像我需要以某种方式识别没有数据的日期,或者:

  • 将零压入
    频率阵列
  • 或者我需要
    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
    值的文本(当我滑动到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行。那么,这有意义吗?这不是原始问题的一部分,但它实际上取决于你需要做什么,如果你不关心额外的空间,你可以为一个不在行中的日期使用一个空元素,或者使用二进制搜索找到一天的位置谢谢。是的,抱歉,这是一个附加问题。我会看看你建议的那些选项,如果我有更多的问题,我会写另一篇文章。你确实回答了我原来的问题,所以我把它标记为已回答。非常感谢!