我需要转换一些JSON数据,而Ramda的indexBy正是我想要的。下面的代码适用于单个对象:
const operativeIndex = R.pipe(R.head, R.keysIn,
R.intersection(['Weight', 'Height', 'Month', 'Week']), R.head);
const reIndex = R.indexBy(R.prop(operativeIndex(testObject)), testObject);
但是为了通过我的重新索引功能映射一个对象数组,我相信我需要重写reIndex
,这样它只需要注入一次testObject
。
我该怎么做?
为了帮助可视化任务:当前代码从这样的数组转换testObject
,这将包含4个允许索引中的一个:
[{ Height: '45',
L: '-0.3521',
M: '2.441',
S: '0.09182'},
{ Height: '45.5',
L: '-0.3521',
M: '2.5244',
S: '0.09153'}]
进入这样的对象:
{ '45':
{ Height: '45',
L: '-0.3521',
M: '2.441',
S: '0.09182' },
'45.5':
{ Height: '45.5',
L: '-0.3521',
M: '2.5244',
S: '0.09153' } }
答案 0 :(得分:1)
如果我正确理解你的问题,你希望reIndex
成为一个获取对象列表并产生对象索引的函数。
如果是,你可以这样做
const operativeIndex = R.pipe(
R.keysIn,
R.intersection(['Weight', 'Height', 'Month', 'Week']),
R.head
)
const reIndex = R.indexBy(R.chain(R.prop, operativeIndex))
然后你可以reIndex(list)
Demo。
BTW请记住keysIn
上升到原型链,订单 NOT 保证。