2016-05-05 2 views
2

オブジェクトの配列をプレーンオブジェクトに変換するにはどうすればよいですか? ここで、配列の各項目は、キーと値のペアが1つのみのオブジェクトであり、キーの名前は不明です。Ramadaを使用してオブジェクトの配列を計画オブジェクトに変換

私はこの

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 

を持っている。しかしeachは、グローバル変数resultを使用していると私はここに副作用を避けるするかどうかはわかりませんので、私は、そのソリューションを嫌います。

答えて

8

Ramdaには、mergeAllの機能が組み込まれています。

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

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

利用代わりに減らす:

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); 

をあなたの配列はオブジェクトの配列であるので、あなたはまた、単に減らすの内側にマージ呼び出すことができます。ここでは

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

は両方の例でjsbinです: http://jsbin.com/mifohakeru/edit?js,console,output

+0

reduce()は、特により複雑な場合に非常に参考になります。 – DaveGauer

2

誰もが既に(const)ES6を使用しているので、素敵な純粋ES6溶液がある。

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

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

Object.assingマージは...をにアレイを拡張するために使用され、最初のものにオブジェクトを提供パラメータのリスト

関連する問題