使用 Ramda 将对象数组转换为普通对象
Convert array of objects to plain object using Ramda
如何将对象数组转换为普通对象?
其中数组的每一项都是一个只有一对 key:value 的对象,并且键的名称未知。
我有这个
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
,我不确定如何避免此处的副作用。
改为使用 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
Ramda 为此内置了一个函数,mergeAll
。
const arrayOfObject = [
{KEY_A: 'asfas'}
,{KEY_B: 'asas' }
];
R.mergeAll(arrayOfObject);
//=> {"KEY_A": "asfas", "KEY_B": "asas"}
因为每个人都已经在使用 ES6 (const
),所以有一个很好的纯 ES6 解决方案:
const arrayOfObject = [
{KEY_A: 'asfas'},
{KEY_B: 'asas'}
];
Object.assign({}, ...arrayOfObject);
//=> {KEY_A: "asfas", KEY_B: "asas"}
Object.assing
将提供的对象合并到第一个对象,...
用于将数组扩展到参数列表。
如何将对象数组转换为普通对象? 其中数组的每一项都是一个只有一对 key:value 的对象,并且键的名称未知。
我有这个
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
,我不确定如何避免此处的副作用。
改为使用 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
Ramda 为此内置了一个函数,mergeAll
。
const arrayOfObject = [
{KEY_A: 'asfas'}
,{KEY_B: 'asas' }
];
R.mergeAll(arrayOfObject);
//=> {"KEY_A": "asfas", "KEY_B": "asas"}
因为每个人都已经在使用 ES6 (const
),所以有一个很好的纯 ES6 解决方案:
const arrayOfObject = [
{KEY_A: 'asfas'},
{KEY_B: 'asas'}
];
Object.assign({}, ...arrayOfObject);
//=> {KEY_A: "asfas", KEY_B: "asas"}
Object.assing
将提供的对象合并到第一个对象,...
用于将数组扩展到参数列表。