[英]How to convert D3 data array-of-objects from long-format to wide-format in JavaScript and D3?
[英]How to change JSON data to Javascript array of objects with D3
这是我的 JSON 数据(此文档是一个外部文件,名为“data.json”)
[
{
"maand": "augustus 2014",
"weinigSlaap": "0.15",
"hogeStress": "0.1",
"langerReistijd": "0.12",
"hogeWerkdruk": "0.1",
"lageLiquiditeit": "0.1"
}
]
我需要它在 D3 的帮助下变成这个样子。
var data = [
[
{
axis: "Weinig slaap",
value: 0.15
}, {
axis: "Hoge stress",
value: 0.1
}, {
axis: "Lange reistijd",
value: 0.12
}, {
axis: "Hoge werkdruk",
value: 0.1
}, {
axis: "Lage liquiditeit",
value: 0.1
}
]
];
我被困在这一点上,不再对生活抱有任何希望;)
d3.json('data.json', function (data) {
data.push(data);
console.log(data);
});
你可以尝试这样的事情:
var data = [{ "maand": "augustus 2014", "weinigSlaap": "0.15", "hogeStress": "0.1", "langerReistijd": "0.12", "hogeWerkdruk": "0.1", "lageLiquiditeit": "0.1" }] var r = /(?:[AZ])/g; var keysToSkip = ["maand"] var result = []; data.forEach(function(d) { var keys = Object.keys(d).filter(x => keysToSkip.indexOf(x) === -1); var _o = keys.map(function(k) { var o = {}; var parsedVal = k.replace(r, function(s) { return " " + s }); return { axis: toTitleCase(parsedVal), value: d[k] } }) result.push(_o); }) console.log(result) function toTitleCase(str) { return str.charAt(0).toUpperCase() + str.substring(1).toLowerCase() }
对您来说,仅 Javascript 就足够了,如下所示。 将此代码保存在 d3.json 成功回调中。
var data = [{ "maand": "augustus 2014", "weinigSlaap": "0.15", "hogeStress": "0.1", "langerReistijd": "0.12", "hogeWerkdruk": "0.1", "lageLiquiditeit": "0.1" }], mappedData = []; for (var i = 0; i < data.length; i++) { var eachObjArr = []; for (key in data[i]) { if (data[i].hasOwnProperty(key)) { var obj = {}; obj[key] = data[i][key]; eachObjArr.push({ axis: key, value: data[i][key] }); } } mappedData.push(eachObjArr); } for (var i = 0; i < mappedData.length; i++) { console.log(mappedData[i]); }
使用Object.keys
你可以遍历对象的键,这就是你得到的:
var d = { "maand": "augustus 2014", "weinigSlaap": "0.15", "hogeStress": "0.1", "langerReistijd": "0.12", "hogeWerkdruk": "0.1", "lageLiquiditeit": "0.1" } var r = Object.keys(d).map(k => ({ axis: k.replace(/[AZ]/g, l => (' ' + l.toLowerCase())), value: Number(d[k]) })) console.log(r)
显然 es6 在这里有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.