obtener todas las combinaciones para una cadena

Estoy intentando crear una función en JavaScript que, dada una cadena, devolverá una matriz de todas las combinaciones posibles de las letras, cada una de las cuales se usará una vez, comenzando con la más corta. Por ejemplo, para la cadena ABC devolvería:

A
B
C
AB
AC
ABC

Podría usar bucles así

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]
        }
    }
}

Pero no sé la longitud de la cadena, por lo que no sabría cuántos bucles utilizar.

¿Algunas ideas?

Edición: no estoy pidiendo permutaciones, abc y acb no deberían ser devueltos. También el más corto es el primero en la matriz es importante.

Esto no es tarea. Es para que un programa resuelva un juego de tipo 'luces apagadas'.

Respuestas a la pregunta(5)

Su respuesta a la pregunta