我有以下形式的数据数组:
_data = [
{key: <String>, values: [<number>...]}
]
如果每个JSON对象中的'values'变量是一个JSON坐标数组(即“x:?,y:?”),我可以使用以下内容:
d3.layout.stack()
.values(function(d) {
return d.values;
});
相反,我需要从每个图层的values数组中读取x作为values数组中的索引,y作为数字。像这样:
_data = [
{key: "oranges", values: [5, 6, 8]},
{key: "bananas", values: [2, 1, 9]}
]
becomes
"oranges": (0, 5), (1, 6), (2, 8);
"bananas": (0, 2), (1, 1), (2, 9);
如何做到这一点?
答案 0 :(得分:1)
这是你正在寻找的吗?
var data = [
{key: "oranges", values: [5, 6, 8]},
{key: "bananas", values: [2, 1, 9]}
];
var newData = [];
var fruit;
var coords;
for (var i = 0; i < data.length; i++) {
coords = [];
for (var x = 0; x < data[i].values.length; x++) {
coords.push([x, data[i].values[x]]);
}
fruit = {};
fruit[data[i].key] = coords;
newData.push(fruit);
}
alert(JSON.stringify(newData));
&#13;
或类似的东西?在需要时只格式化所需的数组?
d3.layout.stack()
.values(function(d) {
var coords = [];
for (var x = 0; x < d.values.length; x++) {
coords.push([x, d.values[x]]);
}
return coords;
});
答案 1 :(得分:1)
如果我正确理解您的问题,您正在寻找适当的访问器功能,以便从D3的堆栈布局中访问您的特定数据格式。以下代码应该可以满足您的需求:
d3.layout.stack()
.values(function(d) {
return d.values.map(function(y, i) {
return { "x": i, "y": y };
});
});
对.map()
的调用将转换您的data.values
数组并返回一个数组,该数组包含x
和y
坐标设置为您指定值的对象。