Conte elementos únicos no array sem ordenar

Em JavaScript, o seguinte irá encontrar o número de elementos na matriz. Supondo que haja um mínimo de um elemento na matriz

arr = ["jam", "beef", "cream", "jam"]
arr.sort();
var count = 1;
var results = "";
for (var i = 0; i < arr.length; i++)
{
    if (arr[i] == arr[i+1])
    {
      count +=1;
    }
    else
    {
        results += arr[i] + " --> " + count + " times\n" ;
        count=1;
    }
}

É possível fazer isso sem usar sort () ou sem alterar o array de alguma forma? Eu imagino que a matriz teria que ser recriada e, em seguida, poderia ordenar na matriz recém-criada, mas eu quero saber qual é a melhor maneira sem classificar. E sim, eu sou um artista, não um programador, sua honra.

questionAnswers(5)

yourAnswerToTheQuestion