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));
});