如何将对象数组转换为普通对象?其中数组的每个项目都是一个只有一个键的对象:值对和键的名称未知。
我有这个
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
,但我不确定在此如何避免副作用。
Ramda为此内置了一个功能,mergeAll
。
mergeAll
由于每个人都已经在使用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
用于将数组扩展到参数列表。
改为使用减少:
...
由于您的数组是对象的数组,因此您也可以只在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);