0
|
华莉星宸Lv7资深互助发布于5 天前
|
借助split()方法把文本分割成数组。 运用双重循环遍历数组,生成所有可能的两两组合。 利用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'] 代码解释 分割文本:text.split(',')会把字符串'A,B,C,D,E'转化为数组['A', 'B', 'C', 'D', 'E']。 生成组合: 外层的flatMap()用于遍历数组中的每个元素。 内层的slice(i + 1)会获取当前元素之后的所有元素,从而避免出现重复组合。 每一个组合都是由当前元素和后续元素拼接而成,比如A和B组合成AB。
扁平化数组:flatMap()会自动把嵌套数组展开,得到一个一维数组。
|
-
yzmfKZXQ1464691(提问者)
- 能给个cpt的模板,看下怎么实现的么
-
华莉星宸 回复 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);
-
yzmfKZXQ1464691(提问者) 回复 华莉星宸
- 好的,有点思路了我试试
-
华莉星宸 回复 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);
-
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']
|
|