Javascript 具有非标准化数据的NVD3多柱状图堆叠显示
我有多个数据集要传递给NVD3多条形图。问题是,如果一个集合与另一个集合中缺少某些属性,则图表在堆叠模式下似乎无法正确显示 假设我有一个用户每周饮酒偏好的列表:Javascript 具有非标准化数据的NVD3多柱状图堆叠显示,javascript,jquery,d3.js,nvd3.js,Javascript,Jquery,D3.js,Nvd3.js,我有多个数据集要传递给NVD3多条形图。问题是,如果一个集合与另一个集合中缺少某些属性,则图表在堆叠模式下似乎无法正确显示 假设我有一个用户每周饮酒偏好的列表: [ { userName: "Todd", values: [ { x: "Coffee", y: 32 }, { x: "Te
[
{
userName: "Todd",
values: [
{
x: "Coffee",
y: 32
},
{
x: "Tea",
y: 13
},
{
x: "Beer",
y: 2
}
]
},
{
userName: "Allison",
values: [
{
x: "Coffee",
y: 4
},
{
x: "Milk",
y: 2
},
{
x: "Sprite",
y: 14
}
]
},
{
userName: "Vern",
values: [
{
x: "Water",
y: 112
},
{
x: "Gatorade",
y: 13
},
{
x: "Beer",
y: 0
}
]
}
]
由于并非所有“用户”都有相同的饮料,因此在堆栈模式下,图形将无法正确显示
如果我对数据进行规范化,以便每个用户都能喝到相同的饮料,而之前缺少的值得到一个0
值,则堆叠模式将正确显示
我正在寻找一种以编程方式规范化数据的方法,以便所有“用户”数组都具有相同的对象计数
这与此处的帖子类似:,但是,我正在寻找一种以编程方式规范化数据的方法。这不是最有效的方法,但不使用任何库,对于不太大的数据量应该可以正常工作:
var drinks = [];
data.forEach(function(d) {
d.values.forEach(function(e) {
if(drinks.indexOf(e.x) == -1) drinks.push(e.x);;
});
});
data.forEach(function(d) {
drinks.forEach(function(drink) {
var have = false;
d.values.forEach(function(e) {
if(e.x == drink) have = true;
});
if(!have) d.values.push({x: drink, y: 0});
});
});
完成演示