如何用JS将字符串中元音替换为*并生成所有可能结果数组
实现思路
你需要的结果本质是所有元音位置的非空替换组合:如果字符串有N个元音,就会生成2^N -1种结果,刚好对应你示例里3个元音得到7个结果的场景。核心用二进制位掩码来实现组合遍历,每个二进制位标识对应位置的元音是否需要替换为*。
完整实现代码
function getAllVowelReplacedVariants(str) { // 定义元音集合,需要区分/不区分大小写可自行调整规则 const vowels = new Set(['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']) // 提取字符串中所有元音的下标位置 const vowelIndexes = [] for (let i = 0; i < str.length; i++) { if (vowels.has(str[i])) vowelIndexes.push(i) } const result = [] const originArr = str.split('') // 遍历所有非空替换组合:掩码从1到2^n -1,排除全0的不替换场景 for (let mask = 1; mask < (1 << vowelIndexes.length); mask++) { const tempArr = [...originArr] for (let i = 0; i < vowelIndexes.length; i++) { // 二进制当前位为1则替换对应位置的元音 if (mask & (1 << i)) { tempArr[vowelIndexes[i]] = '*' } } result.push(tempArr.join('')) } return result }
调用测试
console.log(getAllVowelReplacedVariants('FadTheChad')) // 输出结果和你要求的数组完全匹配
如果需要保留原字符串(完全不替换的情况),只要把循环起始值mask = 1改成mask = 0即可,会返回8个结果。
内容的提问来源于stack exchange,提问作者Fad F
相关产品推荐
相关产品推荐

