以下是我的数据集和我想要的内容。 任何人都可以建议我如何将我的datatset格式化为我想要的东西吗? FIDDLE HERE(在浏览器中使用控制台)
我做了一个尝试(下面),这是一个接近但不是我想要的。
这是我的数据集
data_p = [
[{"key":"Device_Model","value":"test_model"},
{"key":">20MB/30","value":"11"},
{"key":">200MB/30","value":"33"},
{"key":">2048MB/30","value":"10"},
{"key":">5120MB/30","value":"55"},
{"key":">10240MB/30","value":"10"}
],
[{"key":"Device_Model","value":"0P6B670"},
{"key":">20MB/30","value":"9"},
{"key":">200MB/30","value":"8"},
{"key":">2048MB/30","value":"2"},
{"key":">5120MB/30","value":"23"},
{"key":">10240MB/30","value":"23"}]]
这就是我想要的
[{
"name": ">20MB/30",
"values": [{
"key": "test_model",
"value": 11
}, {
"key": "0P6B670",
"value": 9
}]
},
{
"name": ">200MB/30",
"values": [{
"key": "test_model",
"value": 33
}, {
"key": "0P6B670",
"value": 8
}]
},
{
"name": ">2048MB/30",
"values": [{
"key": "test_model",
"value": 10
}, {
"key": "0P6B670",
"value": 2
}]
},
{
"name": ">5120MB/30",
"values": [{
"key": "test_model",
"value": 55
}, {
"key": "0P6B670",
"value": 23
}]
},
{
"name": ">10240MB/30",
"values": [{
"key": "test_model",
"value": 10
}, {
"key": "0P6B670",
"value": 23
}]
}
]
这是我的尝试
bars = color.domain().map(function(name){
return {
name: name,
values: data_p.reduce(function(d) {
return d.slice(1)
})
}
});
它给了我这个:
"[{"name":">20MB/30","values":[{"key":">20MB/30","value":11},{"key":">200MB/30","value":33},{"key":">2048MB/30","value":10},{"key":">5120MB/30","value":55},{"key":">10240MB/30","value":10}]},{"name":">200MB/30","values":[{"key":">20MB/30","value":11},{"key":">200MB/30","value":33},{"key":">2048MB/30","value":10},{"key":">5120MB/30","value":55},{"key":">10240MB/30","value":10}]},{"name":">2048MB/30","values":[{"key":">20MB/30","value":11},{"key":">200MB/30","value":33},{"key":">2048MB/30","value":10},{"key":">5120MB/30","value":55},{"key":">10240MB/30","value":10}]},{"name":">5120MB/30","values":[{"key":">20MB/30","value":11},{"key":">200MB/30","value":33},{"key":">2048MB/30","value":10},{"key":">5120MB/30","value":55},{"key":">10240MB/30","value":10}]},{"name":">10240MB/30","values":[{"key":">20MB/30","value":11},{"key":">200MB/30","value":33},{"key":">2048MB/30","value":10},{"key":">5120MB/30","value":55},{"key":">10240MB/30","value":10}]}]"
注意:我在尝试时使用了map,reduce和color的组合,但这可能是我的无知/体验。我不确定是否可以使用过滤器或任何其他功能。我熟悉这些,但没有我想要的那么多,所以关于这些的一些指示会很棒。
答案 0 :(得分:1)
您可以将对象用作哈希表并迭代数组。然后存储Device_Model
并稍后将其用作键,而所有其他键和值将转到结果集。
var data_p = [[{ key: "Device_Model", value: "test_model" }, { key: ">20MB/30", value: "11" }, { key: ">200MB/30", value: "33" }, { key: ">2048MB/30", value: "10" }, { key: ">5120MB/30", value: "55" }, { key: ">10240MB/30", value: "10" }], [{ key: "Device_Model", value: "0P6B670" }, { key: ">20MB/30", value: "9" }, { key: ">200MB/30", value: "8" }, { key: ">2048MB/30", value: "2" }, { key: ">5120MB/30", value: "23" }, { key: ">10240MB/30", value: "23" }]],
result = [];
data_p.forEach(function (a) {
var Device_Model;
a.forEach(function (b) {
if (b.key === 'Device_Model') {
Device_Model = b.value;
return;
}
if (!this[b.key]) {
this[b.key] = [];
result.push({ name: b.key, values: this[b.key] });
}
this[b.key].push({ key: Device_Model, value: b.value });
}, this);
}, Object.create(null));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:1)
这是一项相当容易的任务。您只需要存储设备(元数据),以便您知道许多设备将在内部循环。然后你只需要循环n-1个结果。
var data_p = [ [
{"key": "Device_Model", "value": "test_model"},
{"key": ">20MB/30", "value": "11"},
{"key": ">200MB/30", "value": "33"},
{"key": ">2048MB/30", "value": "10"},
{"key": ">5120MB/30", "value": "55"},
{"key": ">10240MB/30", "value": "10"}
], [
{"key": "Device_Model", "value": "0P6B670"},
{"key": ">20MB/30", "value": "9"},
{"key": ">200MB/30", "value": "8"},
{"key": ">2048MB/30", "value": "2"},
{"key": ">5120MB/30", "value": "23"},
{"key": ">10240MB/30", "value": "23"}
] ];
function transform(data) {
var devices = data.map(function(model) {
return model[0]['value'];
});
var results = [];
for (var i = 1; i < data[0].length; i++) {
var values = [];
for (var d = 0; d < devices.length; d++) {
values.push({
key : devices[d],
value : data[d][i]['value']
});
}
results.push({
name : data[0][i]['key'],
values : values
});
}
return results;
}
document.body.innerHTML = JSON.stringify(transform(data_p), null, 4);
&#13;
body {
font-family: monospace;
white-space: pre;
}
&#13;