2015-09-25 4 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

..Pls найти этот вопрос http://stackoverflow.com/questions/32817532/converting-an-array-object-to-another-object-part-2-in-javascript – forgottofly

1

Вы должны цикл по клавишам во внешнем объекте, затем ключи во внутренних объектах, так до тех пор, как вы можете зависеть от методов массива ES5:

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

Pls найдет этот вопрос http: // stackoverflow .com/вопросы/32817532/превращающего ан-массив объекта к другому объектно-части-2-в-JavaScript – forgottofly