Guest User

Untitled

a guest
Jun 19th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.05 KB | None | 0 0
  1. function getLinkedToInfoByArrayOfIds(ids) {
  2. if(ids.length < 1) {
  3. return [];
  4. }
  5. var group = {
  6. 'person' : 'relation',
  7. 'organization' : 'relation',
  8. 'project' : 'project',
  9. 'sales' : 'sales'
  10. };
  11. var linkedTo = {
  12. 'person' : 'person_id',
  13. 'organization' : 'organization_id',
  14. 'project' : 'project_id',
  15. 'sales' : 'sales_id'
  16. };
  17.  
  18. // Group them by their matched grouping. [ 'person:abc', 'org:abc' => ['relation' => ['person:abc', 'org:abc'] ]
  19. var groupedData = {};
  20. for(var i = 0; i < ids.length; i++) {
  21. var split = ids[i].split(':');
  22. if(!(group[split[0]] in groupedData)) {
  23. groupedData[group[split[0]]] = [];
  24. }
  25. groupedData[group[split[0]]].push(ids[i]);
  26. }
  27.  
  28. // Get the highest count of groupedData (['relation' => ['person:abc', 'org:abc'], 'project' => ['project:abc']] returns 2
  29. var max = 0;
  30. var keys = Object.keys(groupedData);
  31. for(var j = 0; j < keys.length; j++) {
  32. if(groupedData[keys[j]].length > max) {
  33. max = groupedData[keys[j]].length;
  34. }
  35. }
  36.  
  37. // Loop the maximum times of occurences, then assign items to each array, and unset them for the next loop
  38. var result = {};
  39. for(var k = 0; k < max; k++) {
  40. for(var j = 0; j < keys.length; j++) {
  41. if(groupedData[keys[j]].length) {
  42. var id = groupedData[keys[j]].shift();
  43. var split = id.split(':');
  44. var key = linkedTo[split[0]];
  45. if(!(k in result)) {
  46. result[k] = {};
  47. }
  48. result[k][key] = id;
  49. }
  50. }
  51. }
  52.  
  53. return result;
  54. }
  55.  
  56. var result = getLinkedToInfoByArrayOfIds([
  57. 'organization:111',
  58. 'person:222',
  59. 'project:333',
  60. 'sales:444',
  61. 'person:555',
  62. 'project:666'
  63. ]);
  64.  
  65. // Expected: Array[3] - [ {org_id: org:111, project_id: project:333, sales_id: sales:444} , { person_id: person:222, project_id: project:666 } , { person_id: person: 555 } ]
Add Comment
Please, Sign In to add comment