在JavaScript中生成可变长度逗号分隔的字符串的所有可能组合

时间:2019-03-14 01:28:28

标签: javascript arrays string algorithm function

输入:

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

预期输出:

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

这是一个简单的示例情况,但是该函数应适用于所有长度的字符串和数组。字符串可能会重复某些字母,例如“ AABB”,与“ A”和“ B”不同。首先需要按元素数量排序,然后按字母数字排序,但此解决方案不是必需的。

3 个答案:

答案 0 :(得分:1)

您可以使用排列函数,然后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);

this answer中的排列功能。

答案 1 :(得分:1)

这实际上是我最近在方案中一直在研究的东西,您似乎正在寻找的是一个根据集合输入生成power set的过程。碰巧已经有一个递归算法可以解决这个问题,但是它是基于数学的,不需要在这里讨论。

这是another post here中的一个简单的JavaScript实现,我针对您的问题进行了修改:

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

console.log(powerSet(myList));

答案 2 :(得分:0)