将对象转换为数组

时间:2015-09-25 14:04:27

标签: javascript arrays

我尝试使用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.任何人都可以为这个问题建议可能的解决方案吗?

2 个答案:

答案 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}}