2015-09-25 110 views
2

我尝试用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”和“WASTE”,但是这可以达到3或4.任何人都可以为这个问题建议可行的解决方案吗?

+3

代码在哪里? –

+0

是以某种方式混合而成的? – user430051

+1

这里的相关性没有意义。我们如何根据之前和之后知道这里发生了什么? –

回答

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); 
+0

..请找到这个问题http://stackoverflow.com/questions/32817532/converting-an-array-object-to-another-object-part-2-in-javascript – forgottofly

1

你需要循环在外部对象的键,然后在内部对象的钥匙,所以只要你可以依靠ES5 Array方法:

var obj1={ 
 
    "jan": { 
 
     "COAL": "25" 
 
    }, 
 
    "feb": { 
 
     "ROM": "50", 
 
     "WASTE": "55" 
 
    }, 
 
    "april": { 
 
     "COAL": "60" 
 
    } 
 
} 
 

 
var o = Object.keys(obj1).reduce(function(acc, month, i) { 
 
    Object.keys(obj1[month]).forEach(function(product) { 
 
    acc.push({'month':month, 'product':product, 'quantity':obj1[month][product]}) 
 
    }); 
 
    return acc; 
 
}, []); 
 

 
document.write(JSON.stringify(o));

使用ES6箭头的功能就显得有点更简洁:

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; 
}, []); 
+0

请找到这个问题http:// stackoverflow的.com /问题/ 32817532 /转换-一个阵列对象到另一对象部分-2-在JavaScript的 – forgottofly