2017-11-09 5 views
0

次のデータをグループ化した一連のテーブルにマップしてレンダリングしようとしていますが、苦労しています。誰もが...正しい方向に私がマップすることができたと、標準的なデータセットをレンダリングしているReact:グループ化された行のマップとレンダリング

*Group 1* 
    - Item 1 
    - Item 2 

    *Group 2* 
    - Item 1 
    - Item 2 

データ

[{ 
    group: "twitter", 
    records : [ 
    {_id: "aMzJECeyvoLGdNzRM", 
    owner: "K7xTxu7PRDCuhFZRC", 
    company_ID: "1", 
    coreURL: "http://test88.com", 
    feedback: "Charles" 
    },{ 
    _id: "aMzJECeyvoLGdNzRM", 
    owner: "K7xTxu7PRDCuhFZRC", 
    company_ID: "1", 
    coreURL: "http://test99.com", 
    feedback: "Gerry" 
    } 
    ]},{ 
    group: "linkedin", 
    records : [ 
    {_id: "aMzJECeyvoLGdNzRM", 
    owner: "K7xTxu7PRDCuhFZRC", 
    company_ID: "1", 
    coreURL: "http://test88.com", 
    feedback: "Charles" 
    },{ 
    _id: "aMzJECeyvoLGdNzRM", 
    owner: "K7xTxu7PRDCuhFZRC", 
    company_ID: "1", 
    coreURL: "http://test99.com", 
    feedback: "Gerry" 
    } 
    ]}] 

私が達成しようとしていますが...私を指すことができますグループ化された要素に苦労している

+0

すでに2つのグループの配列がありますそれぞれに2つのアイテムを持つオブジェクト。あなたは正確に何を達成しようとしていますか? –

+0

私はOPがオブジェクトではなく配列(辞書の一種)ではないと思います –

+0

ありがとうございます私は正しい形のデータを持っていますが、ヘッダーの下に一連の行を構築しようとしています。これは結局結局のところ、グループ化プロパティを変更する状態を変更した場合(例えば、フィードバックをグループ化する場合など) –

答えて

0

のようなメソッドのこの種を実装するいくつかのライブラリがあります。 RecordListDetailコンポーネント:

groupedTables(){ 
return groupedData.map ((group, index) => { 
    return (
    <div key={index}> 
    <div> 
     {group.group} 
    </div> 
    <Table striped bordered condensed hover> 
     <tbody> 
     {group.records.map ((details, index) => 
     <RecordListDetail 
      key={index} 
      details={details} 
     /> 
     )} 
     </tbody> 
    </Table> 
    </div> 
0

groupByユーティリティを作成し、おそらくそれをArrayプロトタイプにリンクするには、reduce functionを使用できます。

Array.prototype.groupBy = function(key) { 
 
    return this.reduce(function(groups, item) { 
 
    const val = item[key]; 
 
    groups[val] = groups[val] || []; 
 
    groups[val].push(item); 
 
    return groups; 
 
    }, {}); 
 
}; 
 

 
const data = [{ 
 
    group: "twitter", 
 
    records: [{ 
 
    _id: "aMzJECeyvoLGdNzRM", 
 
    owner: "K7xTxu7PRDCuhFZRC", 
 
    company_ID: "1", 
 
    coreURL: "http://test88.com", 
 
    feedback: "Charles" 
 
    }, { 
 
    _id: "aMzJECeyvoLGdNzRM", 
 
    owner: "K7xTxu7PRDCuhFZRC", 
 
    company_ID: "1", 
 
    coreURL: "http://test99.com", 
 
    feedback: "Gerry" 
 
    }] 
 
}, { 
 
    group: "linkedin", 
 
    records: [{ 
 
    _id: "aMzJECeyvoLGdNzRM", 
 
    owner: "K7xTxu7PRDCuhFZRC", 
 
    company_ID: "1", 
 
    coreURL: "http://test88.com", 
 
    feedback: "Charles" 
 
    }, { 
 
    _id: "aMzJECeyvoLGdNzRM", 
 
    owner: "K7xTxu7PRDCuhFZRC", 
 
    company_ID: "1", 
 
    coreURL: "http://test99.com", 
 
    feedback: "Gerry" 
 
    }] 
 
}] 
 

 
const groupedData = data.groupBy('group'); 
 
console.log(groupedData);

私は次のようにこれを並べ替えるとでグループ化されたテーブルの各行をレンダリングするために管理し、既にlodashunderscore

+0

Thanks @ Sag1v私はlodashを見てきましたが、実際にデータセットをどのように反復できるかの実用的な例を探していましたカテゴリごとにテーブルを作成するか、グループヘッダーにいくつかの列を超える列スパンを持つ1つの大きなテーブルを作成する –

+0

あなたの質問を誤解して申し訳ありません。データのレンダリング方法を尋ねています私はあなたがデータ形状を変更する方法を尋ねていると思っていました。 –

+0

問題をより明確に編集しました –

関連する問題