JSFiddle - React, Tailwind, and code Playground
by arackaf
HTML
<script src="http://adamrackis.com/linq.js"></script>
JavaScript
var groups = [ {id: 1, name: 'Report Group 1'}, {id: 2, name: 'Report Group 2'}, {id: 3, name: 'Report Group 3'} ];
var reports = [ { id: 1, groupId: 1, name: 'Report 1'}, { id: 2, groupId: 1, name: 'Report 2'}, { id: 3, groupId: 1, name: 'Report 3'},
{ id: 4, groupId: 1, name: 'Report 4'}, { id: 5, groupId: 1, name: 'Report 5'},
{ id: 6, groupId: 2, name: 'Report 6'}, { id: 7, groupId: 2, name: 'Report 6'},
{ id: 8, groupId: 3, name: 'Report 6'} ];
var permissions = [
{ id: 1, reportId: 1, label: 'adam'}, { id: 2, reportId: 1, label: 'bob'},
{ id: 3, reportId: 1, label: 'jim'}, { id: 4, reportId: 2, label: 'mark'},
{ id: 5, reportId: 2, label: 'jason'}];
var mappedGroups = getMappedReportsAndGroups(reports, groups, permissions);
console.log(mappedGroups);
function getMappedReportsAndGroups(reports, groups, permissions){
groups = Enumerable.From(groups);
reports = Enumerable.From(reports);
permissions = Enumerable.From(permissions);
groups.ForEach(function(g) { g.reports = reports.Where(function(r) { return r.groupId == g.id; }).ToArray(); });
reports.ForEach(function(r) { r.permissions = permissions.Where(function(p) { return p.reportId == r.id; }).ToArray(); });
return groups.ToArray();
}