如何将对象数组转换为普通对象? 其中数组的每个项目都是一个只有一个键的对象:值对,键名称未知。
我有这个
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
而且我不确定如何避免副作用。
答案 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:
中调用mergeconst each2 = R.reduce((acc,value) => R.merge(value,acc),{},arrayOfObject);
这是一个带有两个例子的jsbin: http://jsbin.com/mifohakeru/edit?js,console,output