使用Ramda indexBy和变量索引

时间:2017-08-08 20:38:48

标签: functional-programming ramda.js

我需要转换一些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' } }

1 个答案:

答案 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 保证。