Je suis sur le point d'utiliser forOwn
pour parcourir les propriétés d'un objet et créer un tableau manuellement et je ne peux m'empêcher de penser qu'il existe un oneliner déjà disponible pour le faire.
{
prop1 : "value",
prop2: { sub:1}
}
à:
[
{key: "prop1", value: "value"},
{key: "prop2", value: {sub:1}}
]
Merci
Vous pouvez utiliser _. Map () de lodash avec noms de propriété abrégés :
const obj = {
prop1 : "value",
prop2: { sub:1}
};
const result = _.map(obj, (value, prop) => ({ prop, value }));
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.2/lodash.min.js"></script>
Ou vous pouvez le faire en utilisant Object#entries
avec Array.map()
et déstructuration du tablea :
const obj = {
prop1 : "value",
prop2: { sub:1}
};
const result = Object.entries(obj).map(([prop, value]) => ({ prop, value }));
console.log(result);
Vous n'avez même pas besoin de lodash pour ça:
var arr = Object.keys(obj).map(function(key){
return { key: key, value: obj[key] };
});
Un peu d'ES6:
_.map( obj, (value, key) => ({key,value}) )
Si vous utilisez lodash/fp vous pouvez utiliser _.entries
const a = { one: 123, two: { value: 'b' }};
const pairs = _.entries(a).map(p => ({ key:p[0], value: p[1] }))
console.log(pairs)
// [
// {
// "key": "one",
// "value": 123
// },
// {
// "key": "two",
// "value": {
// "value": "b"
// }
// }
// ]
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash-fp/4.15.0/lodash-fp.js"></script>
Vous pouvez utiliser pairs
si cela correspond à votre cas:
_.pairs({ 'barney': 36, 'fred': 40 });
// → [['barney', 36], ['fred', 40]]
En réponse au commentaire d'Ori et pour être complet, j'ai publié la version _.forOwn. C'est légèrement plus rapide, mais vous devez d'abord déclarer le tableau (pas un-liner).
var arr = [];
_.forOwn(obj,function(item, key) {
arr.Push({ property : key, value : item});
});