2014-09-15 6 views
0

종종 나는 첫 번째 인수 (항목 값) 만 통과하여 (키/인덱스와 반복자를 제외하고) 반복 함수가 오버로드되지 않도록하기 위해 map 반복자에서 강제 단항을 원한다.로다시/밑줄을 어떻게 강제합니까?

나는이 필요한 상황의 예는 다음과 같다 :

var parts = [ 
    'projectIds', 
    [ 1, 6, 7 ], 
    'properties', 
    [ 'name', 'startDate' ] 
]; 

function pathFrom(parts){ 
    return _(parts) 
     // This is the tricky bit: 
     .map(_.partialRight(_.result, 'toString')) 
     .join('/') 
     .valueOf(); 
}; 

alert(pathFrom(parts)); 

내 원하는 출력이 projectIds/1,6,7/properties/name,startDate하지만 반복 지수는 전달과 값에서 뜯어 낸 때문에 실제로, p/6/o/로 끝 (p'projectIds'[0], 6[1,6,7][1], o'properties'[2] 등)이다.

첫 번째 인수 만 가져오고 나머지는 삭제되도록지도 반복기의 상태를 잠 그려면 어떻게해야합니까?

+0

왜 'partialRight'과'result'를 사용하고 있습니까? – Bergi

+0

@Bergi 필자는 '숟가락이 없다'는 것을 의미한다고 가정합니다. 덕분에 항목은 'join'을 통해 toString으로 강요됩니다. 위의 코드는 단순화 된 예입니다. 실제 체인은 나중에 RegExp를 사용합니다. – Barney

+0

아니, 나는 당신이 어떻게 그것들을 전혀 사용하고 싶지 않은지 이해하지 못했다. 나는'result'가 함수를 리턴하는 대신 메소드를 호출한다는 사실을 잊어 버렸습니다. 지금은 점점 명확 해지고 있습니다. – Bergi

답변

1

명백한 진리와 함께 함수 표현식을 사용하는 것 외에 다른 질문에 대한 좋은 해결책이 있다고 생각하지 않습니다. Underscore/Lodash에는 함수의 수식을 수정하는 메서드가 없으므로 partial 및 특히 partialRight 함수를 사용하기가 어렵습니다. 대신 Ramda을보고 싶을 수 있습니다.

그러나 사용 사례에 대해서는 어쨌든 필요하지 않습니다. 적절한 도구 _.invoke입니다 :

function pathFrom(parts) { 
    return _.invoke(parts, 'toString').join('/'); 
} 
+0

이것은 문제의이 특별한 경우를 해결합니다. -'_.invoke'를 가르쳐 주셔서 고맙습니다! 나는 누군가가 나를 lodash ('_.curry')에 강제적으로 - arity 기능을 향해 가리킬 것이기를 바랐다. R에 대한 포인터 주셔서 감사합니다 - 매우 부자가 보인다! – Barney

0

그냥 참고로 lodash 지금 당신은 무엇을 찾고 있는지 않는다는 _.ary 기능을 가지고 있습니다.

var path = require('path'); 
[ 'foo', 'bar', 'baz' ].map(_.ary(path.resolve, 1)); 
// => [ '/<cwd>/foo', '/<cwd>/bar', '/<cwd>/baz' ] 
+0

또한 단지'require ('path')'가 [node] (https://nodejs.org/api/path.html) –