我的原始CSV中包含此类数据:
id, lat, long, data_type_1, data_type_2, data_type_3
1 , 50, 1, 10, 20, 40
我需要将其转换为这种结构:
id, lat, long, data_type, value,
1 , 50, 1, 1, 10,
1 , 50, 1, 2, 20,
1 , 50, 1, 3, 40,
我查看了d3.csv和question或者两个bl.ocks.org的devdoc。
d3.csv("traffic_data.csv", function(d) {
numericColHeaders.forEach(header => d[header] = parseInt(d[height]));
console.error(d); // to inspect in the console
return d;
}, function(error, data) {
if (error) throw error;
var root = d3.stratify()
.id(function(d) {
return d.data_type;
})
.parentId(function(d) {
return d.id;
})
(data)
.sum(function(d) {
return d.value;
})
.sort(function(a, b) {
return b.height - a.height || b.value - a.value;
});
treemap(root);
// do more stuff
})
当我控制掉数据时,它会打印一行,但为了使我的数据标准化,我需要将其“扩展”为多行,我无法理解如何执行此操作。我无法想到如何使用map
,filter
或reduce
进行此操作....如果有任何我希望与reduce相反的话。
我怎样才能做到这一点?
答案 0 :(得分:2)
你可以在不使用内置map
和reduce
函数的情况下执行此操作:
rows.map(row => {
const { id, lat, long, data_type_1, data_type_2, data_type_3 } = row
return [
{
id, lat, long,
data_type: '1',
value: data_type_1
},
{
id, lat, long,
data_type: '2',
value: data_type_2
},
{
id, lat, long,
data_type: '3',
value: data_type_3
}
]
}).reduce((prev, next) => prev.concat(next), [])
long
是一个保留字,这段代码完全没有用。但是应该给你正确的想法。