2017-11-16 1 views
0

중복 된 호출을 findIndexInOcompareIndexes에서 어떻게 제거 할 수 있습니까?Ramda 함수에서 중복 제거

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

+1

결과를 해시로 저장하려면 findIndexIn0을 수정하십시오. 또는 배열에서 인덱스 해시를 미리 만들 수도 있습니다. – bipll

답변

2

방법에 대한

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