使用公式将一组文本两两组合生成数组

需求是用户在文本框中输入A,B,C,D,E将文本两两组合生成数组,A,B和B,A这种都需要生成出来,不需要A,A这种组合,使用公式怎么处理,另外能处理中英文的逗号么

FineReport yzmfKZXQ1464691 发布于 5 天前
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
华莉星宸Lv7资深互助
发布于5 天前
  1. 借助split()方法把文本分割成数组。

  2. 运用双重循环遍历数组,生成所有可能的两两组合。

  3. 利用filter()方法将重复的组合(像AB和BA)以及自身组合(例如AA)排除掉。

下面是具体的实现代码:

const text = 'A,B,C,D,E';
const chars = text.split(',');

const combinations = chars.flatMap((a, i) => 
  chars.slice(i + 1).map(b => a + b)
);

console.log(combinations);
// 输出: ['AB', 'AC', 'AD', 'AE', 'BC', 'BD', 'BE', 'CD', 'CE', 'DE']

代码解释
  1. 分割文本:text.split(',')会把字符串'A,B,C,D,E'转化为数组['A', 'B', 'C', 'D', 'E']。

  2. 生成组合

    • 外层的flatMap()用于遍历数组中的每个元素。

    • 内层的slice(i + 1)会获取当前元素之后的所有元素,从而避免出现重复组合。

    • 每一个组合都是由当前元素和后续元素拼接而成,比如A和B组合成AB。

  3. 扁平化数组:flatMap()会自动把嵌套数组展开,得到一个一维数组。

  • yzmfKZXQ1464691 yzmfKZXQ1464691(提问者) 能给个cpt的模板,看下怎么实现的么
    2025-06-23 11:07 
  • 华莉星宸 华莉星宸 回复 yzmfKZXQ1464691(提问者) 文本框编辑结束事件
    const text = this.getValue();
    const chars = text.split(',');
    const combinations = chars.flatMap((a, i) =>
    chars.slice(i + 1).map(b => a + b)
    );
    alert(combinations);
    2025-06-23 11:18 
  • yzmfKZXQ1464691 yzmfKZXQ1464691(提问者) 回复 华莉星宸 好的,有点思路了我试试
    2025-06-23 11:24 
  • 华莉星宸 华莉星宸 回复 yzmfKZXQ1464691(提问者) 可以把生成的值,放到一个单元格里面也行
    const text = this.getValue();
    const chars = text.split(',');
    const combinations = chars.flatMap((a, i) =>
    chars.slice(i + 1).map(b => a + b)
    );
    _g().setCellValue(0,2,2,combinations)
    alert(combinations);
    2025-06-23 11:26 
  • yzmfKZXQ1464691 yzmfKZXQ1464691(提问者) AB,BA不视为同一种组合可以用下面的方式:
    const text = 'A,B,C';
    const chars = text.split(',');

    // 生成所有排列(顺序敏感)
    const permutations = chars.flatMap(
    (a, i) => chars
    .filter((_, j) => i !== j) // 排除自身索引
    .map(b => a + b)
    );

    console.log(permutations); // 输出: ['AB', 'AC', 'BA', 'BC', 'CA', 'CB']
    2025-06-24 14:55 
最佳回答
0
用户k6280494Lv6专家互助
发布于5 天前

不支持

  • 3关注人数
  • 42浏览人数
  • 最后回答于:5 天前
    请选择关闭问题的原因
    确定 取消
    返回顶部