Javascript D3嵌套格式日期不正确
我从D3.js nest功能中得到了一些奇怪的行为,似乎key和rollup正在将test_日期从日期对象转换为字符串 这是我的密码:Javascript D3嵌套格式日期不正确,javascript,d3.js,Javascript,D3.js,我从D3.js nest功能中得到了一些奇怪的行为,似乎key和rollup正在将test_日期从日期对象转换为字符串 这是我的密码: var data = [{ "test_type": "x1", "test_date": "2014-07-15" }, { "test_type": "x3", "test_date": "2014-07-16" }, { "test_type": "x2", "test_date": "2014-07-27"
var data = [{
"test_type": "x1",
"test_date": "2014-07-15"
}, {
"test_type": "x3",
"test_date": "2014-07-16"
}, {
"test_type": "x2",
"test_date": "2014-07-27"
}, {
"test_type": "x1",
"test_date": "2014-07-28"
}];
var parseDate = d3.time.format("%Y-%m-%d").parse;
data.forEach(function(d) {
d.test_date = parseDate(d.test_date);
});
var result = d3.nest()
.key(function(d) {
return d.test_type;
})
.key(function(d) {
return d.test_date;
})
.rollup(function(leaves) {
return leaves.length;
})
.entries(data);
结果是:
[{
"key": "x1",
"values": [{
"key": "Tue Jul 15 2014 00:00:00 GMT-0600 (Mountain Daylight Time)",
"values": 1
}, {
"key": "Mon Jul 28 2014 00:00:00 GMT-0600 (Mountain Daylight Time)",
"values": 1
}]
}, {
"key": "x3",
"values": [{
"key": "Wed Jul 16 2014 00:00:00 GMT-0600 (Mountain Daylight Time)",
"values": 1
}]
}, {
"key": "x2",
"values": [{
"key": "Sun Jul 27 2014 00:00:00 GMT-0600 (Mountain Daylight Time)",
"values": 1
}]
}]
我需要嵌套的键值是日期对象而不是字符串。有人知道这是什么原因吗
下面是一个JSFIDLE,它的功能(和对象)以两种方式工作:
将返回一个d3.time.format(“%Y-%m-%d”).parse('2014-08-29')
对象。它使用该格式了解如何解释作为参数给出的字符串Date
将返回字符串,格式为d3.time.format(“%Y-%m-%d”)(新日期(2014,7,29))
2014-08-29'
此外,
d3.nest
中的键将始终强制为字符串。您将需要结合这两种形式来获得所需的行为。问候。我找到了一个适合我的解决方案。我也有类似的问题。
我想用时间戳作为键嵌套数据。AmeliaBR写道,键是字符串。但是,我想使用关键点作为对象,因为它应该是图表的x轴
var data = [{
"test_type": "x1",
"test_date": "2014-07-15"
}, {
"test_type": "x3",
"test_date": "2014-07-16"
}, {
"test_type": "x2",
"test_date": "2014-07-27"
}, {
"test_type": "x1",
"test_date": "2014-07-15"
}];
var parseDate = d3.time.format("%Y-%m-%d").parse;
我正在为嵌套数据的键使用另一个字段date,而没有将数据解析为date/time
data.forEach(function(d) {
d.key_date = d.test_date;
d.test_date = parseDate(d.test_date);
});
var result = d3.nest()
.key(function(d) {
return d.key_date;
})
.rollup(function(leaves) {
return leaves.length;
})
.entries(data);
对于result
我再次添加test\u date
作为一个对象,因为key\u date
是一个字符串
result.forEach(function(d) {
d.test_date = parseDate(d.key);
});
我不知道这是不是一个好办法。
如果没有,请提供建议。
谢谢…恐怕这不是“不正确”的行为——这是方法的定义方式(与Javascript对象或d3.map hashmap相同,后者在内部用于创建嵌套)。通常,我建议只从值数组中的第一个条目访问原始数据值,但rollup函数会删除该选项。这并不理想,但您应该能够强制字符串返回到一个日期,而不会丢失数据。感谢您的回复。这就是我最后做的。这不是一个好主意。它只是回避了这个问题,因为您的键也是字符串。更糟糕的是,您需要两次迭代
result
来解析日期。我建议您转储第一个。forEach
一起使用test\u date
字符串作为嵌套,然后进行解析。我知道在result
上迭代两次不是一个好主意。但我需要数据
,因为这是为了进一步处理。我会采纳你的建议,考虑一个更好的解决办法。谢谢。我找到了更好的解决办法。我在sql语句中进行汇总。不管怎样,速度似乎更快。