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

问题描述 投票:1回答:2

输入:

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

预期产量:

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

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

javascript arrays string algorithm function
2个回答
1
投票

您可以使用置换函数,然后在joining之后使用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
投票

这实际上是我最近在计划中所做的事情,你看起来正在寻找的是一个从集合输入生成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));
© www.soinside.com 2019 - 2024. All rights reserved.