删除 Ramda 函数中的重复项

Removing Duplication In Ramda Function

如何删除 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']

REPL

怎么样

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"]