obter todas as combinações para uma string

Estou tentando criar uma função em JavaScript que, dada uma string, retornará uma matriz de todas as combinações possíveis das letras, cada uma usada no máximo uma vez, começando com a mais curta. por exemplo, para a string ABC, ele retornaria:

A
B
C
AB
AC
ABC

Eu poderia usar loops assim:

for(i=0; i<string.length; i++) {
   //add string[i]
}
for(i=0; i<string.length; i++) {
    for(a=i; a<string.length; a++) {
            //add string[i]+string[a]
    }
}
for(i=0; i<string.length; i++) {
    for(a=i; a<string.length; a++) {
        for(b=a; b<string.length; b++) {
            //add string[i]+string[a]+string[b]
        }
    }
}

Mas eu não sei o comprimento da string, então não sei quantos loops usar.

Alguma ideia?

Edit: Eu não estou pedindo permutações, abc e acb não devem ser retornados. Também o menor sendo o primeiro no array é importante.

Isso não é lição de casa. É para um programa resolver um jogo do tipo "apagar as luzes".

questionAnswers(5)

yourAnswerToTheQuestion