function processResults()

in src/components/CompareResults/TableContent.tsx [56:89]


function processResults(
  results: CompareResultsItem[],
): ListOfResultsGroupedByTest {
  // This map will make it possible to group all results by test header first,
  // and by revision then.
  // Map<header, Map<revision, array of results>>
  const processedResults: Map<
    string,
    Map<string, CompareResultsItem[]>
  > = new Map();

  for (const result of results) {
    const { new_rev: newRevision, header_name: header } = result;

    let resultsForHeader = processedResults.get(header);
    if (!resultsForHeader) {
      resultsForHeader = new Map();
      processedResults.set(header, resultsForHeader);
    }

    const resultsForRevision = resultsForHeader.get(newRevision);
    if (!resultsForRevision) {
      resultsForHeader.set(newRevision, [result]);
    } else {
      resultsForRevision.push(result);
    }
  }

  // This command converts the Map of maps in an array of arrays.
  return Array.from(processedResults, ([header, resultsForHeader]) => [
    header,
    [...resultsForHeader],
  ]);
}