Comparação de arrays desordenados - Javascript

Trabalhando com javasacript, em muitos momentos surge a necessidade de manter em hiddens ids selecionados em arrays, concatenados por algum caracter separador. E em algumas dessas situações preciso comparar esses arrays com outros arrays, que podem estar em ordens diferentes.

Sendo assim uma dica rápida de como comparar arrays de objetos, dos quais estão em ordens diferentes:

//Compara string de arrays [strArray1 = lista 1, strArray2 = lista 2, separator = separador]
function disorderlyStrArraysAreEqual(strArray1, strArray2, separator) {
    //Verifica se os valores estao vazios
    if (strArray1 == '' || strArray1 == 'undefined' || 
        strArray2 == '' || strArray2 == 'undefined') {
        return (strArray1 == strArray2);
    }

    //Separa os valores pelo caracter separador 
    //e remove o ultimo separador se for o ultimo caracter da string
    var array1 = rtrim(strArray1, separator).split(separator);
    var array2 = rtrim(strArray2, separator).split(separator);

    //Compara arrays pelo tamanho
    if (array1.length != array2.length) {
        return false;
    }

    for (var index = 0; index < array1.length; index++) {
        //Verifica na lista 2 se o item atual da lista 1 não existe
        if (strArray2.indexOf(array1[index]) == -1)
            return false;
        //Verifica na lista 1 se o item atual da lista 2 não existe
        if (strArray1.indexOf(array2[index]) == -1)
            return false;
    }
    return true;
}

Para garantir que seja removido ultimo caracter de separação vamos utilizar a seguinte função, que remove caracter passado por parametro, se ele for o ultimo da string:

function rtrim(str, chars) {
    chars = chars || "s";
    return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

Utilizando a função de comparação:

var isEqual = disorderlyStrArrayIsEqual(newValues, oldValues, ';');