使用Ramda将对象数组转换为计划对象

时间:2016-05-05 00:52:19

标签: javascript functional-programming ramda.js

如何将对象数组转换为普通对象? 其中数组的每个项目都是一个只有一个键的对象:值对,键名称未知。

我有这个

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而且我不确定如何避免副作用。

3 个答案:

答案 0 :(得分:14)

Ramda有一个内置功能,mergeAll

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

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

答案 1 :(得分:5)

由于每个人都已经使用ES6(Bundle args = getArguments(); int value = args.getString("VALUE"); ),因此有一个很好的纯ES6解决方案:

const

const arrayOfObject = [ {KEY_A: 'asfas'}, {KEY_B: 'asas'} ]; Object.assign({}, ...arrayOfObject); //=> {KEY_A: "asfas", KEY_B: "asas"} 将提供的对象合并到第一个,Object.assing用于将数组扩展到参数列表。

答案 2 :(得分:3)

使用reduce代替:

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

由于您的数组是一个对象数组,您也可以在reduce:

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

这是一个带有两个例子的jsbin: http://jsbin.com/mifohakeru/edit?js,console,output