Ich bin dabei, forOwn zu verwenden, um die Eigenschaften eines Objekts zu durchlaufen und ein Array manuell zu erstellen, und kann nicht anders, als zu glauben, dass bereits ein Oneliner dafür verfügbar ist.

{ 
  prop1 : "value",
  prop2: { sub:1}
}

Zu:

[ 
   {key: "prop1", value: "value"},
   {key: "prop2", value: {sub:1}}
]

Vielen Dank

31
sambomartin 19 Aug. 2015 im 19:09

6 Antworten

Beste Antwort

Sie können lodashs _.map () mit Kurznamen für Eigenschaftsmerkmale:

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>

Oder Sie können dies mit Object#entries mit Array.map() und Array-Destrukturierung:

const obj = { 
  prop1 : "value",
  prop2: { sub:1}
};

const result = Object.entries(obj).map(([prop, value]) => ({ prop, value }));

console.log(result);
34
Ori Drori 22 Dez. 2018 im 21:03

Als Antwort auf Oris Kommentar und der Vollständigkeit halber habe ich die _.forOwn-Version veröffentlicht. Es ist geringfügig schneller, aber Sie müssen zuerst das Array deklarieren (kein Einzeiler).

var arr = [];
_.forOwn(obj,function(item, key) {
    arr.push({ property : key, value : item});
});
1
sambomartin 20 Aug. 2015 im 09:19

Dafür brauchen Sie nicht einmal Lodash:

var arr = Object.keys(obj).map(function(key){
  return { key: key, value: obj[key] };
});
12
Joseph 19 Aug. 2015 im 16:14

Sie können pairs verwenden, wenn es zu Ihrem Fall passt:

_.pairs({ 'barney': 36, 'fred': 40 });
// → [['barney', 36], ['fred', 40]]

Ref: https://lodash.com/docs#pairs

3
Skarllot 19 Aug. 2015 im 16:20

Wenn Sie lodash / fp verwenden, können Sie _.entries verwenden

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>
3
Marcelo Lazaroni 8 Sept. 2016 im 14:09

Ein bisschen ES6:

_.map( obj, (value, key) => ({key,value}) )

10
Dzianis Sudas 2 Juni 2016 im 15:04