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

mat*_*sfh 7 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
Run Code Online (Sandbox Code Playgroud)

但我不喜欢这个解决方案,因为forEach它使用的是全局变量result,我不知道如何避免副作用.

Sco*_*yet 17

Ramda有一个内置的功能,mergeAll.

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

R.mergeAll(arrayOfObject); 
//=> {"KEY_A": "asfas", "KEY_B": "asas"}
Run Code Online (Sandbox Code Playgroud)


jJ'*_*jJ' 5

由于每个人都在使用ES6(const),因此有一个很好的纯ES6解决方案:

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

Object.assign({}, ...arrayOfObject);
//=> {KEY_A: "asfas", KEY_B: "asas"}
Run Code Online (Sandbox Code Playgroud)

Object.assing将提供的对象合并到第一个对象,...用于将数组扩展到参数列表.