2013-07-29 3 views
0

아래 데이터를 기반으로 여러 값을 그룹화하려면 밑줄을 사용하려고합니다.여러 값에 대한 GroupBy 및 CountBy

var obj = [ 
     { 
      'Name': 'A', 
      'Status': 'Ticket Closed' 
     },{ 
      'Name': 'B', 
      'Status': 'Ticket Open To Close' 
     },{ 
      'Name': 'A', 
      'Status': 'Ticket Closed' 
     },{ 
      'Name': 'B', 
      'Status': 'Ticket Open' 
     },{ 
      'Name': 'A', 
      'Status': 'Ticket Open To Closed' 
     },{ 
      'Name': 'A', 
      'Status': 'Ticket Open' 
     },{ 
      'Name': 'B', 
      'Status': 'Ticket Open' 
     } 
    ]; 

예상 출력

[{ 
    'Name': Closed', 
    'Count': [2, 0] 
},{ 
    'Name': Open', 
    'Count': [2, 3] 
}] 

먼저 객체가 A와 B를 동시에 대 (폐쇄 상태 워드를 포함) 모두 폐쇄 티켓을 계산한다. 마찬가지로 두 번째 개체는 열린 티켓을 계산합니다. 여기 내가 시도한 것입니다

var arr = _.groupBy(obj, function (row) { 
    return (row["Status"].indexOf('Open') > 0 ? "Open" : "Closed"); 
}); 

var arr1 = _.groupBy(arr["Closed"], 'Name'); 
var arr2 = _.groupBy(arr["Open"], 'Name'); 

var cData = []; 
cData.push(arr1); 
cData.push(arr2); 

동일한 코드에서 계산할 수 없습니다. 어떤 도움이 필요합니까?

+0

'[2,0]'과 '[2,3]'번호의 출처를 모르겠습니다. –

+0

첫 번째 배열의 [2,0]은 닫힌 티켓의 수입니다 (열린 단어가 표시되지 않는 것을 고려). – Ashish

답변

0

확인. 그래서 이것을 해결할 수있었습니다. 여기에 여기에

http://jsfiddle.net/7ETKV/

는 해결 코드는 작동 예를가요 :

var jsondata = jsondata.sort(function (a, b) { 
    return a.Name.localeCompare(b.Name); 
}); 
_.each(jsondata, function (row, idx) { 
    ((row.Status.indexOf('Open') > 0) ? jsondata[idx].bgStatus = 'Open' : jsondata[idx].bgStatus = 'Closed'); 
}); 

var cdata = [], xobj = {}; 
var gd = _.groupBy(jsondata, 'bgStatus'); 
var cats = _.keys(_.groupBy(jsondata, 'Name')); 

for (var p in gd) { 
    var arr = _.countBy(gd[p], function (row) { 
     return row.Name; 
    }); 

    _.each(cats, function (row) { 
     if (!arr.hasOwnProperty(row)) arr[row] = 0; 
    }); 

    xobj.Name = p; 
    xobj.Data = _.values(arr); 

    cdata.push(xobj); 
    xobj = {}; 
} 

희망이 사람을 도움이 될 수 있습니다. 코드/최적화에 대한 모든 업데이트가 환영받습니다.