我有一些表格数据:
var Input = {
"Variable": "Variable Name",
"Data": {
"key_1": value_1,
"key_2": value_2,
"key_3": value_3,
"key_4": value_4,
"key_5": value_5,
},
"Omega": value
};
我想做的是将其重构为这种形式:
var Output = [
{
"variable":"variable name",
values:[
{
"label":"key_1",
"value": value_1
},
{
"label":"key_2",
"value": value_2
},
{
"label":"key_1",
"value": value_1
},
{
"label":"key_3",
"value": value_3
},
{
"label":"key_4",
"value": value_4
},
{
"label":"key_5",
"value": value_5
},
]
我通过遍历它并将相关的键/值对推送到输出数组,然后通过输入数据找到了我需要的东西。但是,这只是给了我一系列的价值观。
我可以(虽然我还没有尝试过这个)循环数组并将偶数索引推到“标签”,将奇数推到“值”。我可能最终会这样做,但如果有一种更明智的方法,比如以我所追求的形式构造输出数组,那么我宁愿这样做。
我最终要做的是在D3.js或NVD3.js中生成一个条形图,其中的键作为标签,值为条形的高度。
但是,我是d3.js的新手,到目前为止,我无法使用我给出的格式生成任何数据
思考?提前谢谢。
[编辑:没有的JSON。]
答案 0 :(得分:2)
我稍微修改了你的输入对象以获得有效的语法。您可以遍历Input.Data
的键以填充output.values
数组。
var input = {
"Variable": "Variable Name",
"Data": {
"key_1": 1,
"key_2": 2,
"key_3": 3,
"key_4": 4,
"key_5": 5,
},
"Omega": 'ohm'
};
var output = {};
output.variable = input.Variable;
output.values = [];
for (var name in input.Data) {
if (!input.Data.hasOwnProperty(name)) continue;
output.values.push({label: name, value: input.Data[name]});
}
console.log(output);
答案 1 :(得分:0)
我猜你想要这样的东西:
var Input = {
"Variable": "Variable Name",
"Data": {
"key_1": 1,
"key_2": 2,
"key_3": 3,
"key_4": 4,
"key_5": 5,
},
"Omega": 6
};
Input.values = Object.keys(Input.Data).map(function(item){ return { "label": item, "value": Input.Data[item] } });
delete Input.Data;
答案 2 :(得分:0)
您可以在键上使用循环并返回包含所需内容的新对象。
var input = {
"Variable": "Variable Name",
"Data": {
"key_1": 'value_1',
"key_2": 'value_2',
"key_3": 'value_3',
"key_4": 'value_4',
"key_5": 'value_5',
},
"Omega": 'value'
},
output = {
"Variable": "Variable Name",
values: Object.keys(input.Data).map(function (k) {
var o = {};
o[k] = input.Data[k];
return o;
})
};
document.write('<pre>' + JSON.stringify(output, 0, 4) + '</pre>');
答案 3 :(得分:0)
它有点神秘但功能齐全。
var Input = {
"Variable": "Variable Name",
"Data": {
"key_1": "value_1",
"key_2": "value_2",
"key_3": "value_3",
"key_4": "value_4",
"key_5": "value_5",
},
"Omega": "value"
},
Output = [Object.keys(Input).reduce((p,c) => {c == "Variable" ? p[c] = Input[c]
: c == "Data" &&
(p.Values = Object.keys(Input[c])
.reduce((a,k) => a.concat({label : k, value : Input[c][k]}),[]));
return p;},{})];
document.write("<pre>" + JSON.stringify(Output,null,2) + "</pre>");
答案 4 :(得分:-1)
由于data
是Object
,您可以使用Object.keys(data)
获取密钥集合,然后您可以使用data[key]
获取每个密钥的值。将其合并到forEach
中,您可以做任何您喜欢的事情。