Генерация всех возможных комбинаций строк с разделением запятыми переменной длины в JavaScript - PullRequest
1 голос
/ 14 марта 2019

Ввод:

["A", "B", "C"]

Ожидаемый результат:

["A", "B", "C", "A, B", "A, C", "B, C", "A, B, C"]

Это простой пример, но функция должна работать для строк и массивов любой длины. В строках могут повторяться определенные буквы, например, «AABB», который отличается от «A» и «B». Сначала необходимо упорядочить по количеству элементов, а затем алфавитно-цифровую сортировку, но для этого решения не требуется.

Ответы [ 2 ]

1 голос
/ 14 марта 2019

Это на самом деле то, над чем я работал в последнее время в схеме, и вам кажется, что вы ищете процедуру, которая генерирует power set из набора входов. Просто случается, что существует рекурсивный алгоритм, который уже существует для решения этой проблемы, но он основан на математике, в которую мне не нужно вдаваться.

Вот простая реализация JavaScript из другого поста здесь , которую я модифицировал для вашей проблемы:

const myList = ["A", "B", "C"];
const powerSet = 
      theArray => theArray.reduce(
        (subsets, value) => subsets.concat(
         subsets.map(set => [value,...set])
        ),
        [[]]
      );

console.log(powerSet(myList));
1 голос
/ 14 марта 2019

Вы можете использовать функцию перестановки, а затем join определенные строки после split их использования:

const arr = ["A", "B", "C"];

function getCombinations(chars) {
  var result = [];
  var f = function(prefix, chars) {
    for (var i = 0; i < chars.length; i++) {
      result.push(prefix + chars[i]);
      f(prefix + chars[i], chars.slice(i + 1));
    }
  }
  f('', chars);
  return result;
}

const permutations = getCombinations(arr).map(e => e.length > 1 ? e.split("").join(", ") : e);

console.log(permutations);

Функция перестановок из этого ответа .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...