使用Ramda将对象数组转换为普通对象

问题描述 投票:6回答:3

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

我有这个

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

但是我不喜欢该解决方案,因为forEach使用的是全局变量result,但我不确定在此如何避免副作用。

javascript functional-programming ramda.js
3个回答
16
投票

Ramda为此内置了一个功能,mergeAll

mergeAll

5
投票

由于每个人都已经在使用ES6(const arrayOfObject = [ {KEY_A: 'asfas'} ,{KEY_B: 'asas' } ]; R.mergeAll(arrayOfObject); //=> {"KEY_A": "asfas", "KEY_B": "asas"} ,所以有一个不错的纯ES6解决方案:

const

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


3
投票

改为使用减少:

...

由于您的数组是对象的数组,因此您也可以只在reduce中调用merge:

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

这里是一个带有两个示例的jsbin:const each2 = R.reduce((acc,value) => R.merge(value,acc),{},arrayOfObject);

© www.soinside.com 2019 - 2024. All rights reserved.