2016-04-04 12 views
5

Dato un oggetto JavaScript, come posso convertirlo in una matrice di oggetti (ognuno con chiave, valore)?Come trasporre un oggetto javascript in un array chiave/valore

Esempio:

var data = { firstName: 'John', lastName: 'Doe', email: '[email protected]' } 

risultante come:

[ 
    { key: 'firstName', value: 'John' }, 
    { key: 'lastName', value: 'Doe' }, 
    { key: 'email', value: '[email protected]' } 
] 
+0

Possibile duplicato [Convertire oggetto di proprietà e valori alla matrice di coppie di valori chiave] (https://stackoverflow.com/questions/14615669/convert-objects-properties-and-values-to-array-of-key-value-pairs) – tommyO

risposta

7

Si può solo un'iterazione sulle proprietà dell'oggetto e creare un nuovo oggetto per ciascuno di essi.

var data = { firstName: 'John', lastName: 'Doe', email: '[email protected]' }; 
var result = []; 

for(var key in data) 
{ 
    if(data.hasOwnProperty(key)) 
    { 
     result.push({ 
      key: key, 
      value: data[key] 
     }); 
    } 
} 
+0

su per 'hasOwnProperty ' –

+0

Concordato! Questo è quello che mi mancava! –

+0

per 'hasOwnProperty' ma down per non farlo in modo funzionale, come @isvforall –

2
var result = []; 
for(var k in data) result.push({key:k,value:data[k]}); 
10

Utilizzando map funzione

var data = { firstName: 'John', lastName: 'Doe', email: '[email protected]' }; 
 

 
var result = Object.keys(data).map(key => ({ key, value: data[key] })); 
 

 
console.log(result); 
 

+0

È una soluzione ECMAScript 6? –

+0

@AlexanderPopov si, è funzione 'arrow' – isvforall

+2

o cambia il nome della variabile per digitare la mappa e l'utente la proprietà dell'oggetto stenografia' chiave => ({chiave, valore: dati [chiave]}) ' –

2

La risposta precedente mi portano a pensare che ci sia un modo migliore ...

Object.keys(data).map(function(key) { 
    return { key, value: data[key] }; 
}); 

o in ES6 utilizzando freccia funzioni:

Object.keys(data).map((key) => { key, value: data[key] }); 
4

Basta rendere la vostra vita più facile e utilizzare ES6 sintassi con una mappa

var output = Object.keys(data).map(key => { 
     return { 
     key: key, 
     value: data[key] 
     }; 
    }) 
0

Altrimenti seleziona selvaggia e rendere le chiavi key e value personalizzabile:

module.exports = function objectToKeyValueArray(obj, keyName = 'key', valueName = 'value') { 
    return Object 
     .keys(obj) 
     .filter(key => Object.hasOwnProperty.call(obj, key)) 
     .map(key => { 
      const keyValue = {}; 
      keyValue[keyName] = key; 
      keyValue[valueName] = obj[key]; 

      return keyValue; 
     }); 
}; 
Problemi correlati