输入:
["A", "B", "C"]
预期产量:
["A", "B", "C", "A, B", "A, C", "B, C", "A, B, C"]
这是一个简单的示例,但该函数应适用于所有长度的字符串和数组。字符串可能会重复某些字母,例如“AABB”,与“A”和“B”不同。首先按元素数量排序,然后需要字母数字排序,但此解决方案不需要。
您可以使用置换函数,然后在join
ing之后使用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。
这实际上是我最近在计划中所做的事情,你看起来正在寻找的是一个从集合输入生成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));