我尝试使用Object.keys()
转换对象
var obj1={
"jan": {
"COAL": "25"
},
"feb": {
"ROM": "50",
"WASTE": "55"
},
"april": {
"COAL": "60"
}
}
到
var obj2=[
{
"month": "jan",
"product": "COAL",
"quantity": "25"
},
{
"month": "feb",
"product": "ROM",
"quantity": "50"
},
{
"month": "feb",
"product": "WASTE",
"quantity": "55"
},
{
"month": "april",
"product": "COAL",
"quantity": "60"
}
]
但在中间失败,因为我无法计算属性,例如在" feb"有两种产品" ROM"和#34; WASTE",但这可以达到3或4.任何人都可以为这个问题建议可能的解决方案吗?
答案 0 :(得分:3)
这样做:
var res = []
for(i in obj1){
var rowObj = obj1[i];
for(j in rowObj){
var newObj = {'month' : i, 'product' : j, 'quantity' : rowObj[j]}
res.push(newObj);
}
}
console.log(res);
答案 1 :(得分:1)
你需要遍历外部对象中的键,然后是内部对象中的键,只要你可以依赖ES5 Array方法:
var o = Object.keys(obj1).reduce((acc, m) => {
Object.keys(obj1[m]).forEach(p => acc.push({'month':m, 'product':p, 'quantity':obj1[m][p]}));
return acc;
}, []);

使用ES6箭头功能,它变得更简洁:
{{1}}