2017-10-28 25 views
-1

私の角張ったアプリケーションでは、私は次のように応答しています。IDでグループ化し、グループ化されたデータから配列を作成する

[{ 
    "proposalId": "cc0bcd90-fc75-4c73-bd66-799b37330fb5", 
    "proposalGpId": "cc0bcd90-fc75-4c73-bd66-799b37380fb5", 
    "eventId": "17e69ea1-54da-11e7-9469-985aebe2005e", 
    "listingId": "pdf19f7e1-5f2b-4d02-a48d-3b6d0189b5d1", 
    "status": "Approved" 
}, { 
    "proposalId": "cc0bcd90-fc75-4c73-bd66-799b373306b5", 
    "proposalGpId": "cc0bcd90-fc75-4c73-bd66-799b37380fb5", 
    "eventId": "17e69ea1-54da-11e7-9469-985aebe2005e", 
    "listingId": "pdf19f7e1-5f2b-4d02-a48d-3b6d0189b5d1", 
    "status": "Approved" 
}] 

私は

ProposalGroup.ts

export class ProposalGroup { 
    eventId: string; 
    proposalGpId: string; 
    proposals: Proposal[]; 
} 

Proposal.ts

export class Proposal { 
    proposalId: string; 
    listingId: Date; 
    eventId: Price; 
    status: string; 
} 
、などのアプリケーションに2つのクラスを持っています210

私は上記のJSONのうちProposalGroupsの配列を作成する必要があります。プロポーザルが同じlistingIdを持つ場合はグループ化する必要があります。

私はこれは私がlodash、

const grouped = _.groupBy(this.proposals, (proposal: Proposal) => proposal.listingId); 

を使用して試してみましたが、上記の辞書を与えるものである

[{ 
    "eventId": "17e69ea1-54da-11e7-9469-985aebe2005e", 
    "proposals": [{ 
     "proposalId": "cc0bcd90-fc75-4c73-bd66-799b37330fb5", 
     "proposalGpId": "cc0bcd90-fc75-4c73-bd66-799b37380fb5", 
     "eventId": "17e69ea1-54da-11e7-9469-985aebe2005e", 
     "listingId": "pdf19f7e1-5f2b-4d02-a48d-3b6d0189b5d1", 
     "status": "approved" 
    }, { 
     "proposalId": "cc0bcd90-fc75-4c73-bd66-799b373306b5", 
     "proposalGpId": "cc0bcd90-fc75-4c73-bd66-799b37380fb5", 
     "eventId": "17e69ea1-54da-11e7-9469-985aebe2005e", 
     "listingId": "pdf19f7e1-5f2b-4d02-a48d-3b6d0189b5d1", 
     "status": "approved" 
    }] 
}] 

、次のようにoutputを生成したいです。

+0

イベントは、複数のリストからの提案を持つことができますか?その場合、1つの配列内にすべてを持つことはできないためです。または、ネストされた配列、つまりグループ化されたプロポーザル配列の配列について話していますか? – andreiho

答えて

1

グループと、新しい配列にグループをマップ:

const proposals = [{"proposalId":"cc0bcd90-fc75-4c73-bd66-799b37330fb5","proposalGpId":"cc0bcd90-fc75-4c73-bd66-799b37380fb5","eventId":"17e69ea1-54da-11e7-9469-985aebe2005e","listingId":"pdf19f7e1-5f2b-4d02-a48d-3b6d0189b5d1","status":"Approved"},{"proposalId":"cc0bcd90-fc75-4c73-bd66-799b373306b5","proposalGpId":"cc0bcd90-fc75-4c73-bd66-799b37380fb5","eventId":"17e69ea1-54da-11e7-9469-985aebe2005e","listingId":"pdf19f7e1-5f2b-4d02-a48d-3b6d0189b5d1","status":"Approved"}]; 
 

 
const result = _(proposals) 
 
    .groupBy('listingId') // group by listingId 
 
    .map((proposals, listingId) => (({ 
 
    eventId: proposals[0].eventId, // omit this if you don't want the eventId 
 
    listingId, // omit it if you don't want the listingId 
 
    proposals 
 
    }))) 
 
    .value(); 
 
    
 
console.log(result);
.as-console-wrapper { max-height: 100%!important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

2

var proposals = [{ 
 
    "proposalId": "cc0bcd90-fc75-4c73-bd66-799b37330fb5", 
 
    "proposalGpId": "cc0bcd90-fc75-4c73-bd66-799b37380fb5", 
 
    "eventId": "17e69ea1-54da-11e7-9469-985aebe2005e", 
 
    "listingId": "pdf19f7e1-5f2b-4d02-a48d-3b6d0189b5d1", 
 
    "status": "Approved" 
 
}, { 
 
    "proposalId": "cc0bcd90-fc75-4c73-bd66-799b373306b5", 
 
    "proposalGpId": "cc0bcd90-fc75-4c73-bd66-799b37380fb5", 
 
    "eventId": "17e69ea1-54da-11e7-9469-985aebe2005e", 
 
    "listingId": "pdf19f7e1-5f2b-4d02-a48d-3b6d0189b5d1", 
 
    "status": "Approved" 
 
}]; 
 

 
console.log('proposals : ', _.chain(/*this.*/proposals) 
 

 
    .groupBy("listingId") 
 
    .transform((result, value, key)=>{ 
 
     result.push({"listingId": key, proposals: value}); 
 
    }, []) 
 
    .value() 
 
);
.as-console-wrapper { max-height: 100%!important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

これは、オブジェクトの配列に辞書を変換します。

+0

'エラー' メッセージ: 'プロパティ' transform 'が型' LoDashExplicitObjectWrapper > 'に存在しません。 –

+0

@Peter Selingerによって更新されたスニペットを試してください。私の答えは最新のlodashドキュメントに基づいています。 – IOR88

関連する問題