получить все комбинации для строки

Я пытаюсь создать в JavaScript функцию, которая с заданной строкой будет возвращать массив всех возможных комбинаций букв, каждая из которых используется не более одного раза, начиная с самой короткой. например, для строки ABC она вернет:

A
B
C
AB
AC
ABC

Я мог бы использовать циклы так:

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

Но я не знаю длину строки, поэтому не знаю, сколько циклов использовать.

Есть идеи?

Изменить: я не прошу перестановок, abc и acb не должны быть оба возвращены. Также важно, чтобы кратчайший был первым в массиве.

Это не домашнее задание. Это программа для решения проблемы "выключения света". Тип игры.

Ответы на вопрос(5)

Ваш ответ на вопрос