2016-05-05 18 views
2

Wie kann ich ein Array von Objekten in ein einfaches Objekt konvertieren? wobei jedes Element des Arrays ein Objekt mit nur einem Schlüssel ist: Das Wertpaar und der Schlüssel haben einen unbekannten Namen.Konvertieren Array von Objekten zu planen Objekt mit Ramda

Ich habe diesen

const arrayOfObject = [ 
    {KEY_A: 'asfas'} 
    {KEY_B: 'asas } 
] 
let result = {} 
const each = R.forEach((item) => { 
    const key = R.keys(item)[0] 
    result[key] = item[key] 
}) 
return result 

Aber ich mag nicht, dass die Lösung, weil die each ist eine globale Variable mit result und ich bin nicht sicher, wie Nebenwirkungen hier zu vermeiden.

Antwort

8

Ramda hat eine eingebaute Funktion mergeAll.

const arrayOfObject = [ 
    {KEY_A: 'asfas'} 
    ,{KEY_B: 'asas' } 
]; 

R.mergeAll(arrayOfObject); 
//=> {"KEY_A": "asfas", "KEY_B": "asas"} 
2

Nutzung reduzieren statt:

const arrayOfObject = [ 
    {KEY_A: 'asfas'} 
    ,{KEY_B: 'asas' } 
]; 
const each = R.reduce((acc,value) => { 
    const key = R.keys(value)[0]; 
    acc[key] = value[key]; 

    return acc; 
},{},arrayOfObject); 

Da Ihr Array ein Array von Objekten ist, können Sie auch einfach anrufen innen verschmelzen ein reduce:

const each2 = R.reduce((acc,value) => R.merge(value,acc),{},arrayOfObject); 

Hier ist ein jsbin mit beiden Beispiele: http://jsbin.com/mifohakeru/edit?js,console,output

+0

reduce() ist ein sehr hilfreicher Vorschlag, besonders für kompliziertere Fälle. – DaveGauer

2

Da jeder ES6 verwenden bereits (const), gibt es eine schöne reine ES6 Lösung:

const arrayOfObject = [ 
    {KEY_A: 'asfas'}, 
    {KEY_B: 'asas'} 
]; 

Object.assign({}, ...arrayOfObject); 
//=> {KEY_A: "asfas", KEY_B: "asas"} 

Object.assing verschmilzt vorgesehen Objekte in dem ersten, ... verwendet wird, um eine Anordnung zu dem erweitern Liste der Parameter.

Verwandte Themen