我有一个我想要转换为对象的数组。例如:
const arr = [{id: 1, key: ''}, {id: 2, key: ''}];
我希望结果是:
const object = { 1: {id: 1, key: ''}, 2: { id: 2, key: ''}}
使用lodash
我可以使用keyBy
功能,但我正在使用ramda并且在那里找不到此功能。
答案 0 :(得分:4)
万一仍有人通过搜索发现此问题,则正确答案为indexBy
,并于2016年中添加。
const list = [{id: 'xyz', title: 'A'}, {id: 'abc', title: 'B'}];
R.indexBy(R.prop('id'), list);
//=> {abc: {id: 'abc', title: 'B'}, xyz: {id: 'xyz', title: 'A'}}
另请参阅:
答案 1 :(得分:1)
您可以使用非常基本的缩减功能解决此问题。
function keyBy(entities, id = "id") {
entities.reduce((acc, entity) => {
acc[entity[id]] = entity;
return acc;
}, {});
}
答案 2 :(得分:0)
我能用ramda获得最优雅的方式:
const arr = [{id: 1, key: '1'}, {id: 2, key: '1'}, {id: 2, key: '2'}];
const reduceToIds = R.reduceBy(R.nthArg(1), [], R.prop('id'));
reduceToIds(arr);