2017-03-15 24 views
0

추가하는 방법 :GROUPBY을하고 underscore.js에 그룹화 된 값의 합이에서

:

var x = [ 
    {category: 'Title', price: 300}, 
    {category: 'Title3', price: 700}, 
    {category: 'Title5', price: 500}, 
];    

논리는 SQL 쿼리와 동일합니다 : 여기에

var x = [ 
    {category: 'Title', price: 100 }, 
    {category: 'Title', price: 200 }, 
    {category: 'Title3', price: 300 }, 
    {category: 'Title3', price: 400 }, 
    {category: 'Title5', price: 500 }, 
]; 

SELECT category, sum (price) FROM x GROUP BY category; 
+0

내가 제목과 예에서 구조하여 GROUP에 맞게 SQL을 변경 :

이 시도해보십시오. – tinlyx

답변

0

업데이트 :

  1. groupBy은 "category"에 의해 초기 배열을 그룹화합니다.
  2. map 다음 두 개의 매개 변수 : keyvalue을 전달하여 그룹화 된 배열의 각 개체를 반복합니다. 첫 번째 key은 "Title"이고 value[{category: 'Title', price: 100 }, {category: 'Title', price: 200 }]의 배열입니다.
  3. map에 업데이트 된 배열을 반환하기 전에 reduce을 사용하여 "가격"을 요약합니다. 기본적으로 배열 (첫 번째 매개 변수)을 반복하고 함수 (두 번째 매개 변수)의 합계를 반환합니다. 첫 번째 반복에서 total0 (마지막 매개 변수는 reduce)입니다. 따라서 첫 번째 리턴은 0 + 100이고 두 번째 반복에서 'new'total으로 전달됩니다.

자세한 내용은 documentation을 참조하십시오.

var groups = _.groupBy(x, 'category'); 
var result = _.map(groups, function(value, key) { 
    return { 
    category: key, 
    price: _.reduce(value, function(total, o) { 
     return total + o.price; 
    }, 0) 
    }; 
}); 
+0

이 기능을 사용 해주셔서 감사합니다. 매핑 및 축소 방법에 대해 설명해 주실 수 있습니까? 나는 새로운 것을 강조하고, 일이 어떻게 진행되는지 알아 내려고 노력하고 있습니다. – TheChosenOne

+0

@TheChosenOne 몇 가지 설명으로 내 대답을 업데이트했습니다. 희망, 도움이됩니다. –