Unique Keys using data attributes

Update results table to show single row of each type with combined values of auditidentity data attribute

by Yatin Luthra

HTML

<table id="results">
<tbody role="alert" aria-live="polite" aria-relevant="all" data-auditidentity="18487179,18487183">
  <tr class="subRow odd" data-activitylogid="6459056" data-auditidentity="18487186" data-auditid="f831583e-d1a9-4e35-ac92-82a5cb48c62e">
    <td class="  sorting_1">Selection</td>
    <td class=" "><a class="auditaction">Update</a></td>
  </tr>
  <tr class="subRow even" data-activitylogid="6459056" data-auditidentity="18487179" data-auditid="88506880-632f-4e17-bceb-ebd4e20e435a">
    <td class="  sorting_1">Procedure</td>
    <td class=" "><a class="auditaction">Update</a></td>
  </tr>
  <tr class="subRow odd" data-activitylogid="6459056" data-auditidentity="18487181" data-auditid="a2768380-8c4a-4070-9834-900f95db77a2">
    <td class="  sorting_1">Procedure</td>
    <td class=" "><a class="auditaction">Update</a></td>
  </tr>
  <tr class="subRow even" data-activitylogid="6459056" data-auditidentity="18487182" data-auditid="cb54deca-2bc4-4b71-ba5a-0e6d075b7b26">
    <td class="  sorting_1">Procedure</td>
    <td class=" "><a class="auditaction">Update</a></td>
  </tr>
  <tr class="subRow odd" data-activitylogid="6459056" data-auditidentity="18487183" data-auditid="05803858-aaba-4f9b-9128-fc0c265cfaf6">
    <td class="  sorting_1">Procedure</td>
    <td class=" "><a class="auditaction">Update</a></td>
  </tr>
</tbody></table>
<span id="showArrayData"></span>

JavaScript

$(document).ready(function(){
	
  var uniqueKeys = [];
var resultsTable = $('#results');
$(resultsTable).find('tbody > tr').each(function() {

	var currentAuditIdentity = $(this).data().auditidentity;
  var currentActivityLogId = $(this).data().activitylogid;
  var tableName = $(this).find('td:eq(0)').text();
  var tableAction = $(this).find('td:eq(1)').text();
  var uniqueKey = {'Name': tableName, 'Action': tableAction, 'AuditIdentity':currentAuditIdentity, 'ActivityLogId':currentActivityLogId};

	var matchingElements = $.grep(uniqueKeys, function(item){
  		return (item != null && item.Name == uniqueKey.Name && item.Action == uniqueKey.Action);
  });
  if (matchingElements.length == 0) {
    uniqueKeys.push(uniqueKey);
  }
  else {
		matchingElements[0].AuditIdentity += ',' + currentAuditIdentity;
    // After we have what we need, remove the combined row as we are combining the keys into one row
    $(this).remove();
  }
});
//Finally, put the latest data back into the remaining unique rows
$.each(uniqueKeys, function(index, value){
		var item = $(resultsTable).find('tr').find('td:eq(0):contains("' + value.Name + '")').parent();
     item.data().auditidentity = value.AuditIdentity;
});
//Just to show the data result.
$('span#showArrayData').text(JSON.stringify(uniqueKeys));
});