d3 reduce方法返回NaN

时间:2015-05-16 23:14:47

标签: javascript arrays date d3.js reduce

更新 添加了JSFIDDLE,我更新了此帖子中的原始值以进行匹配。小提琴不起作用,因为csv是外部的。 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]

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

  1. 将零推入frequencyArray
  2. 或者我需要cumulativeFrequencyArray来显示以前的索引?
  3. 我也不喜欢我两次访问外部csv文件,但那是另一个问题:)谢谢!

    ORIGINAL: 使用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];
    

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

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

    我使用日期滑块显示frequencyArraycumulativeFrequencyArray值的文字(当我滑到10/21/14时,文字会显示" 2& #34;和#34; 12")。我这样说 - "当滑块值等于dateArray中的值时,显示相应的indexOf frequencyArraycumulativeFrequencyArray

    这很有效,直到你滑到没有价值的日期,比如10/19/14,显示" NaN"和" NaN"。精细。因此,如果没有找到日期,则将NaN设为零

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

    然而不是" 0"和" 6",文本显示" 0"和" NaN"。它很好地为frequencyArray文本添加了零,但仍然将NaN放在cumulativeFrequencyArray文本中。

    如何将cumulativeFrequencyArray文本放入以前值的总和?

    感谢。

1 个答案:

答案 0 :(得分:1)

由于以下因素,你得到了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,我建议将日期解析为数字而不是将它们作为字符串处理