У меня есть файл csv в следующем формате
type,1,2,3,4,5,6,7,8,.... // Upto 48
type1,54.69801915,84.4717406,81.87766667,66.48516667,...
type2,51.57399106,84.23170179,82.13950136,67.37540461,...
......
Я хочу нарисовать линейную диаграмму, используя эти данные csv с d3. Как только я вложу их, используя приведенный ниже код
d3.nest().key(function(d) {
return d.type;
}).entries(data);
Мой json выглядит следующим образом
{ key: "type1", values: […] }
а внутри values
это всего лишь массив из одного элемента, значение которого равно { 1: 54.69801915, 2: 84.4717406, 3: 81.87766667, … }
.
Но я ожидаю, что это будет массив, похожий на
{ { 1: 54.69801915}, {2: 84.4717406}, {3: 81.87766667}, … }
Может кто-нибудь сказать мне, что я здесь делаю не так? Или как мне получить ожидаемый формат?
Что ж, это ожидаемое поведение d3.nest()
.
Если вам нужна структура, которую вы поделили в своем вопросе, с values
в качестве массива объектов, я предлагаю вам написать свою собственную функцию вложенности.
Вот пример кода, который делает то, что вы хотите, используя map
и for...in
. Это ни элегантно, ни красиво, оно намеренно многословно, чтобы его можно было легко понять (я использую только несколько столбцов и строк в ваших данных):
var csv = `type,1,2,3,4
type1,54.69801915,84.4717406,81.87766667,66.48516667
type2,51.57399106,84.23170179,82.13950136,67.37540461`;
var data = d3.csvParse(csv);
var nested = data.map(function(d) {
var obj = {
key: d.type,
values: []
};
for (var prop in d) {
if (prop !== "type") {
obj.values.push({
[prop]: d[prop]
})
}
}
return obj;
});
console.info(nested)
<script src = "https://d3js.org/d3.v5.min.js"></script>
Некоторые дополнительные комментарии: