JavaScript动态掩码字符串格式化函数复杂场景结果异常排查
问题根因
原函数逻辑存在两个核心缺陷:
- 遍历基准错误:以原始输入字符串为遍历维度,每处理1个原始字符最多仅能补1个掩码中的空格,遇到掩码内连续多空格的场景,会直接跳过剩余空格错位填充字符,导致格式错乱。
- 指针移动逻辑错误:原逻辑无论是否补了空格,处理完单个原始字符后掩码指针移动步长固定,完全没有对齐掩码的实际位置。
修复方案
调整遍历基准为掩码字符串,逐位处理掩码内容:遇到空格则直接追加空格到结果,遇到非空格占位符则按顺序取原始输入的字符填充,原始字符全部填充完成后直接终止遍历即可。
修复后代码如下:
export const getFormatValue = (raw, mask) => { let rawIndex = 0; const formatted = []; const rawChars = [...raw]; for (const char of mask) { if (rawIndex >= rawChars.length) break; if (char === ' ') { formatted.push(' '); continue; } formatted.push(rawChars[rawIndex]); rawIndex++; } return formatted.join(''); };
用例验证
- 简单单空格分隔场景:
getFormatValue('23', '0 0000 0000 0000')返回值为2 3,与预期一致。 - 连续多空格复杂场景:
getFormatValue('ABBCCC', 'A AA AAA')返回值为A BB CCC,与预期完全匹配。
内容的提问来源于stack exchange,提问作者karterkortland
相关产品推荐
相关产品推荐

