2009-08-12 7 views
1

いくつかのグループ化ヘッダーを持つテーブルを作成しようとしています。 私は1つのグループを持っているときにすべてがうまくいきますが、どのように動的グループを作成しますか?Javascript動的グループ化

これは私がこれまでに(1グループ用)持っているものです。

var groupby = ''; 
arrdata.each(function(element){ 
    if (groupby != element.groupby) { 
     groupby = element.groupby; 
     tbody.push(groupby) 
    } 
    tbody.push(element) 
}) 

は、どのように私はそれが動的グループを作成するのですか?

+0

: このソリューションは、多項式時間の

Array.prototype.groupBy=function(property){ "use strict";function deepCopy(p) { var c = {}; for (var i in p) { if (typeof p[i] === 'object') { c[i] = (p[i].constructor === Array)?[]:{}; deepCopy(p[i],c[i]); } else { c[i] = p[i]; } } return c; } var retarr=[]; var len=this.length; for(var i=0;i<len;i++){ var groupedlen=retarr.length,found=false; for(var j=0;j<groupedlen;j++){ if(this[i][property]===retarr[j].key){ retarr[j].values.push(deepCopy(this[i])); found=true; break; } } if (found === false) { retarr.push({ key: this[i][property], values: [] }); retarr[retarr.length-1].values.push(deepCopy(this[i])); } } return retarr; }; 

テストケースであることに注意してください? –

答えて

0

この構造で試してみてください。

arrdata = [ 
    { 
     "groupby": {fields}, 
     "data":[{fields},{fields},{fields}] 
    }, 
    { 
     "groupby": {fields}, 
     "data":[{fields},{fields},{fields}] 
    }, 
    { 
     "groupby": {fields}, 
     "data":[{fields},{fields},{fields}] 
    }, 
] 

jQuery.each(arrdata, function(element){ 
    tbody.push(element.groupby) 
    jQuery.each(element.data , function(elementData){ 
     tbody.push(elementData); 
    }) 
}) 
+0

そうですね、それは私がそのような方法でグループ化されたデータを持っていることを考慮していますが、私は束の中のデータを持っていて、グループバイは別の束ですか? – R0b0tn1k

+0

次に、例を渡す必要があるので、解決策を提供する方が簡単です –

2

あなたは可能性が最初Objectにグループにそれらを..におけるオブジェクトを通じてのためのその後

Array.prototype.groupBy = function(keyName) { 
    var res = {}; 
    this.forEach(function(x) { 
    var k = x[keyName]; 
    var v = res[k]; 
    if (!v) v = res[k] = []; 
    v.push(x); 
    }); 
    return res; 
}; 

var employees = [{first: ..., last: ..., job: ...}, ...]; 
var byJob = employees.groupBy('job'); 
for (var job in byJob) { 
    document.write('<h3>Job: '+job+'</h3>'); 
    byJob[job].forEach(function(e) { 
    document.write('<p>'+e.last+', '+e.first+'</p>'); 
    }); 
} 
0

より一般的な溶液。それを直接使うことができます。使用されるオブジェクトのディープコピー。 arrdataの構造がどのように

var arr=[{num: 1,key:911},{num: 2,key:22},{num: 3,key:23},{num: 4,key:222},{num: 4,key:2222},{num: 2,key:2},{num: 1,key:29},{num: 3,key:26},{num: 4,key:24}]; 

var grouped=arr.groupBy('num'); 

console.log(grouped); 
関連する問題