2016-06-29 19 views
1

:Ramda의 '진화'기능에 해당하는 lodash/fp는 무엇입니까? <a href="http://ramdajs.com/docs/#evolve" rel="nofollow">Ramda's evolve</a>의 lodash에 해당 찾고

존재하는 경우 '항목'하지만 '몸'을 자르고 '제목'필드에서 원래 모든 필드를 포함하는 객체를 반환
const transformForDisplay = (item) => { 
    const transform = { 
    body: truncate({ length: 100 }), 
    title: truncate({ length: 50 }) 
    } 

    return R.evolve(transform, item) 
} 

.

편집 : 작동합니다. 뭐라구?

const transformForDisplay = (item) => { 
    const transform = { 
    body: truncate, 
    title: truncate 
    } 

    const mapValuesWithKey = _.mapValues.convert({ cap: false }) 
    return mapValuesWithKey((x, key) => transform[key] ? transform[key](x) : x)(item) 
} 

답변

3

내재 된 동일한 기능을 찾을 수 없습니다. 다음은 직접 evolve을 구현하는 방법입니다.

_.getOr을 사용하여 반복하지 않으려 고 한 것을 제외하고는 이미 가지고있는 것입니다. 필요한 경우 에 대한 재귀 호출을 추가했습니다.

// Implementation  
 

 
const mapValuesWithKey = _.mapValues.convert({cap: false}); 
 

 
function evolve(transformations) { 
 
    return item => 
 
    mapValuesWithKey((value, key) => { 
 
     const transformation = _.getOr(_.identity)(key)(transformations); 
 
     const type = typeof transformation; 
 
     return type === 'function' ? 
 
     transformation(value) : 
 
     transformation && type === 'object' ? 
 
      evolve(transformation)(value) : 
 
      value; 
 
    })(item); 
 
} 
 

 
// Example  
 

 
const tomato = { 
 
    firstName: ' Tomato ', 
 
    data: {elapsed: 100, remaining: 1400}, 
 
    id: 123 
 
}; 
 
const transformations = { 
 
    firstName: _.trim, 
 
    lastName: _.trim, // Will not get invoked. 
 
    data: {elapsed: _.add(1), remaining: _.add(-1)}, 
 
    id: null, // Will have no effect. 
 
} 
 
const result = evolve(transformations)(tomato); 
 
console.log(result);
<script src="https://cdn.jsdelivr.net/lodash/4.13.1/lodash.min.js"></script> 
 
<script src="https://cdn.jsdelivr.net/lodash/4.13.1/lodash.fp.min.js"></script>

+0

감사 즉 /입니다 /에서 [Ramda 구현] 가까이 (https://github.com/ramda/ramda/blob/master/src/evolve.js#L31) . 나는 그 대답이 직접적으로 상응하는 것이 아니라고 생각한다. –

+1

@ NickCox 필자는 그 어떤 것도 알지 못한다는 것을 분명히하기 위해 필자의 말을 덧붙였다. Ramda 구현에 대한 링크를 제공해 주셔서 감사합니다. 그것은 어떤 코너 케이스를 드러냈다. –