尝试使用d3.max返回最大日期

时间:2016-11-20 22:09:31

标签: javascript d3.js

我的代码如下:

var latestMth
d3.csv(barDataCSV_Mth, function(rows) {
    x = rows.map(function(d) {
        return {
            "month": parseDate(d.dt)
        };
    })
    latestMth = d3.max(d3.values(x));
});

" barDataCSV_Mth"中的数据是这样的:

measure,group,dt,amount
Revenue,B,11/1/2015,10
Revenue,B,12/1/2015,23456
Revenue,B,1/1/2016,2346
Revenue,B,2/1/2016,2346
Revenue,B,3/1/2016,656
Revenue,B,4/1/2016,346
Revenue,B,5/1/2016,2346
Revenue,B,6/1/2016,346
Revenue,B,7/1/2016,2346

为什么它将2015年作为最大值返回?

注意

我正在使用d3.v3。
解析日期函数为:var parseDate = d3.time.format("%m/%d/%Y").parse;

1 个答案:

答案 0 :(得分:3)

#!/usr/bin/env python with open("file1.txt", "r") as file1, open("file2.txt", "r") as file2, / open("file3.txt", "r") as file3, open("file4.txt", "r") as file4: d1 = {} d2 = {} d3 = {} d4 = {} dicts = [d1, d2, d3, d4] #d1 = {key1: [x1, x2, x3], key2: [y1, y2, y3], key3: [z1, z2, z3]} #d2 = {key1: [x4, x5, x6],key2: [y4, y5, y6], key3: [z4, z5, z6]} #d3 = {key1: [x7, x8, x9], key2: [y7, y8, y9], key3: [z7, z8, z9]} #d4 = {x2: [a, b, c], y2: [d, e, f], z2: [g, h, i]} for b in file1: row = b.strip().split('\t') if row[0] not in d1: d1[row[0]] = row[1], row[3], row[4] for c in file2: row = c.strip().split('\t') if row[0] not in d2: d2[row[0]] = row[1:] for f in file3: row = f.strip().split('\t') if row[0] not in d3: d3[row[0]] = row[1:] for m in file4: row = m.strip().split('\t') if row[0] not in d4: d4[row[0]] = row[1], row[3], row[2] final_dict = {} for k in (dicts): for key, value in k.iteritems(): final_dict[key].append(value) print final_dic #key1 x1 a b x2 x3 x4 x5 x8 x9 #key2 y1 d e y2 y3 y4 y5 y8 y9 #key3 z1 g h z2 z3 z4 z5 z8 z9

  

使用自然顺序

返回给定数组中的最大值

你现在拥有的是一系列对象,这就是它无法运作的原因。

解决方案1 ​​

一个选项是更改d3.max变量,因此您可以使用x可以使用的一组平面值:

d3.max

解决方案2

或者,如果您不想更改x = rows.map(function(d) { return parseDate(d.dt) }); latestMth = d3.max(d3.values(x)); console.log(latestMth);//returns Fri Jul 01 2016 ,请不要使用x,其中:

  

返回包含指定对象的属性值的数组。

相反,请使用d3.values

事实上,这个"解决方案2"是首选解决方案,因为map是使用mapd3.max查找对象数组中最大/最小值的最常用方法:

d3.min

这样做,您可以将latestMth = d3.max(x.map(d=>d.month)); 保留为对象数组:

x