输入:
["A", "B", "C"]
预期输出:
["A", "B", "C", "A, B", "A, C", "B, C", "A, B, C"]
这是一个简单的示例情况,但是该函数应适用于所有长度的字符串和数组。字符串可能会重复某些字母,例如“ AABB”,与“ A”和“ B”不同。首先需要按元素数量排序,然后按字母数字排序,但此解决方案不是必需的。
答案 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)