javascript group by 對數據分組


網上找不到js分組的原生態方法,今天有空自己寫了個方法,感覺還可以,拿出來分享,望各位讀者多多指教。

 1 $scope.groupBy = function (itemlist, gby) {
 2 
 3         var setGroupObj = function (noteObj,rule, gby, gIndex, maxIndex)
 4         {
 5             var gname = rule[gby[gIndex]];
 6             if (gIndex == maxIndex) {
 7                 if (noteObj[gname] == undefined)
 8                     noteObj[gname] = [];
 9                 if (noteObj[gname].indexOf(rule) < 0) {
10                     noteObj[gname].push(rule);
11                 }
12             }
13             else {
14                 if (noteObj[gname] == undefined) {
15                     noteObj[gname] = {};
16                 }
17                 setGroupObj(noteObj[gname], rule, gby, gIndex + 1, maxIndex);
18             }
19         }
20 
21         var noteObj = {};
22         for (var i = 0; i < itemlist.length; i++) {
23             setGroupObj(noteObj, itemlist[i], gby, 0, gby.length - 1);
24         }
25 
26 
27         var getSubInfo = function (note, p, gIndex, maxIndex) {
28             var newobj = {}
29             newobj.key = p;
30             newobj.value = [];
31             if (gIndex == maxIndex) {
32                 for (var k in note) {
33                     newobj.value.push(note[k]);
34                 }
35             }
36             else {
37                 for (var k in note[p]) {
38                     newobj.value.push(getSubInfo(note[p][k], k, gIndex + 1, maxIndex));
39                 }
40             }
41             return newobj;
42         }
43         var myobj = [];
44         for (var p in noteObj) {
45             myobj.push(getSubInfo(noteObj, p, 0, gby.length - 1));
46         }
47         return myobj;
48     }
49     $scope.groupRules = $scope.groupBy(allrules, ['groupbycolumn1', 'groupbycolumn2']);

其中allrules是要分組的數組,groupbycolumn1,groupbycolumn2是要進行分組的字段名,可以支持多個。

返回的結果是一個分組的對象:

var result={key:'',value:[

{key:'',value:[]},{key:'',value:[]}

]}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM