2014-09-23 6 views
2

술어가 값으로 true 또는 false을 반환하는지 여부에 따라 JavaScript 배열의 값을 두 개의 개별 배열로 분할하고 싶습니다. values이 큰 데이터 세트로 교체 된 경우는 여기 괜찮아 두 번 각각의 값에 대한 조건을 실행되지만 문제가 될 수Haskell의 Data.List.Partition과 같은 단일 작업으로 _.filter 및 _.reject를 실행하십시오.

var values = [1, 2, 3, 4]; 
var even = function (num) { return num % 2 === 0; }; 
var evens = _.filter(values, even); 
var odds = _.reject(values, even); 

이 쉽게 밑줄 또는 소호 - 대쉬를 사용하여 두 가지 작업으로 수행 할 수 있습니다 even이 계산적으로 비싼 술어로 대체 된 경우.

Lo-Dash에 대한 문서를 살펴 보았지만 한 번의 작업으로이 작업을 수행 할 수있는 내용을 볼 수 없었습니다. 필자는 수동으로 그러한 함수를 작성할 수 있지만 이상한 생략이있는 것 같습니다. 내가 누락 된 이런 기능이 있습니까?

답변

5

밑줄은 _.partition이 있습니다 하나의 요소를 모두 술어 및 요소가 하나 모든 조건을 만족하지 않는 만족 : 두 배열에

파티션_.partition(array, predicate)

분할 배열.

하지만 Lo-Dash에는 아직 없습니다. partition 자신을 객체에서 두 조각을 당겨 다음

var partition = _.groupBy(values, function(num) { return num % 2 === 0 }); 

및; 대신 groupBy을 사용할 수 아직 가정 할 두 단계지만 values 만 통과하면됩니다. 이것은 물론 불리언 ​​키를 문자열로 나타내지 만 문제가되지는 않습니다.

+1

그래서 수업은 lodash가 밑줄 문자를 모두 가지고 있다고 생각하기보다는 먼저 밑줄 문서를 확인하는 것입니다. 나는 이것을 위해 lodash에 패치를 제출해야 할 것 같아. –

+0

'_.partition'은 Underscore에서 상당히 새롭다. [Change Log] (http://underscorejs.org/#changelog)는 2 월에 1.6.0이 나오기 때문에 Lo-Dash가 언더 코어 인터페이스의 해당 부분과 아직 일치하지 않습니다. 나는 패치를 제출할 생각을 좋아합니다. –

+0

https://github.com/lodash/lodash/issues/177에 따라 파티션이 Lo-Dash로 가고있는 것처럼 보입니다. (그리고 그들은'_.groupBy'를 사용하는 동일한 해결 방법을 언급합니다) –