Javascript “我该怎么做?”;“过滤器”;或者以其他方式重新构造此数据?
我有一些表格数据:Javascript “我该怎么做?”;“过滤器”;或者以其他方式重新构造此数据?,javascript,arrays,d3.js,nvd3.js,Javascript,Arrays,D3.js,Nvd3.js,我有一些表格数据: 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":"va
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
},
]
我通过循环输入数据并将相关的键/值对推送到输出数组中,从中找到了所需的内容。但是,这只是给了我一个值数组
我可以(尽管我还没有尝试过)循环遍历数组,将偶数索引推到“label”,将奇数索引推到“value”。我可能最终会这样做,但如果有更明智的方法,比如按照我想要的形式构造输出数组,那么我宁愿这样做
我最终要做的是在D3.js或NVD3.js中生成一个条形图,其中键作为标签,值作为条形图的高度
但是,我对d3.js还不熟悉,到目前为止,我无法使用给定格式的数据生成任何内容
想法?提前谢谢
[已编辑:未编辑的JSON.]我稍微修改了您的输入对象,使其具有有效的语法。您可以循环使用
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);
由于
数据
是一个对象
,因此可以使用对象.keys(数据)
获取密钥集合,然后可以使用数据[key]
获取每个密钥的值。将此功能整合到一个forEach
中,您可以做任何您喜欢的事情。我想您需要这样的功能:
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;
您可以在键上使用循环,并返回包含所需内容的新对象
var输入={
“变量”:“变量名”,
“数据”:{
“键1”:“值1”,
“键2”:“值2”,
“键3”:“值3”,
“键4”:“值4”,
“键5”:“值5”,
},
“欧米茄”:“价值”
},
输出={
“变量”:“变量名”,
值:对象。键(输入。数据)。映射(函数(k){
var o={};
o[k]=输入数据[k];
返回o;
})
};
document.write(“”+JSON.stringify(输出,0,4)+“”)代码>它有点神秘,但功能齐全
var输入={
“变量”:“变量名”,
“数据”:{
“键1”:“值1”,
“键2”:“值2”,
“键3”:“值3”,
“键4”:“值4”,
“键5”:“值5”,
},
“欧米茄”:“价值”
},
输出=[Object.keys(Input).reduce((p,c)=>{c==“变量”?p[c]=Input[c]
:c==“数据”&&
(p.Values=Object.keys(输入[c])
.reduce((a,k)=>a.concat({label:k,value:Input[c][k]}),[]);
返回p;},{})];
write(“+JSON.stringify(Output,null,2)+”)代码>值数组中项目的顺序是否重要?您如何处理Omega
?从输出中包括或排除?D3.js的可能副本有适当的方法:,尽管它返回的数据格式稍有不同({key,value}
,而不是{label,value}
)。Omega可以包含在json中其他数据的另一个图形中。Cryptic是正确的。。。不过,如果输出中的“值”不在引号中,它也可以工作。我正在努力解决这个问题。如果你有什么建议,请扔给我。价值观才是关键。这是否真的很重要,如果它在引用或不。。?您可以像输出[0]一样访问它。值