Я получаю некоторое нечетное поведение от функции гнезда D3.js, кажется, что ключ и rollup преобразуют test_date из объекта Date в строку.D3 Дата форматирования D3 неверно
Вот мой код:
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
}]
}]
мне нужно вложенное значение ключа быть дата объекта не является строкой. Кто-нибудь знает, что может вызвать это?
Вот jsfiddle с проблемой http://jsfiddle.net/2ryahc9L/1/
Я боюсь, что это не «неправильное» поведение - так определяется метод, [ключи всегда обрабатываются как строки] (https://github.com/mbostock/d3/ wiki/Arrays # nest_key) (то же, что и для объекта Javascript или хэш-карты d3.map, которые используются внутри для создания гнезда). Обычно я предлагаю просто получить исходное значение данных из первой записи в вашем массиве значений, но функция rollup удаляет эту опцию. Это не идеально, но вы должны иметь возможность принуждать строку к дате без потери данных. – AmeliaBR
Благодарим за отзыв. Это то, что я закончил делать. –