Javascript 消除Ramda函数中的重复

Javascript 消除Ramda函数中的重复,javascript,functional-programming,ramda.js,Javascript,Functional Programming,Ramda.js,如何删除compareIndexes中对findIndexInO的重复调用 const a = [ {name: 'charlie', value: 1}, {name: 'bravo', value: 7}, {name: 'delta', value: 12}, {name: 'alpha', value: 19}, ] const propEqName = propEq('name'); const findIndexInO = findIndex(__, a); con

如何删除
compareIndexes
中对
findIndexInO
的重复调用

const a = [
  {name: 'charlie', value: 1},
  {name: 'bravo', value: 7},
  {name: 'delta', value: 12},
  {name: 'alpha', value: 19},
]

const propEqName = propEq('name');
const findIndexInO = findIndex(__, a);
const compareIndexes = comparator((from, to) => lt(findIndexInO(propEqName(from)), findIndexInO(propEqName(to))))
const sortOnIndex = sort(compareIndexes);

const decideOrder = (...args) => sortOnIndex(args);

decideOrder('delta', 'charlie'); // ['charlie', 'delta']
decideOrder('bravo', 'alpha'); // ['bravo', 'alpha']
decideOrder('alpha', 'charlie'); // ['charlie', 'alpha']
怎么样

const order = addIndex(reduce)((ord, a, idx) => assoc(a.name, idx, ord), {}, a)
const decideOrder = unapply(sortBy(prop(__, order)))
??因为您已经在函数中嵌入了
a
。作为一个额外的好处,如果这对您很重要,您也可以这样做:

decideOrder('delta', 'alpha', 'bravo') //=> ["bravo", "delta", "alpha"]
怎么样

const order = addIndex(reduce)((ord, a, idx) => assoc(a.name, idx, ord), {}, a)
const decideOrder = unapply(sortBy(prop(__, order)))
??因为您已经在函数中嵌入了
a
。作为一个额外的好处,如果这对您很重要,您也可以这样做:

decideOrder('delta', 'alpha', 'bravo') //=> ["bravo", "delta", "alpha"]

是否修改findIndexIn0以将结果存储在哈希中?或者甚至从数组中预生成索引散列?修改findIndexIn0以将结果存储在散列中?甚至从数组中预生成索引散列?