使用JavaScript将字母数组按空字符串分隔转换为单词数组
问题说明
现有JavaScript字符数组,数组内的单字母为单词组成部分,空字符串''是不同单词的分隔标记,需要将其处理为拼接完成的单词数组:
- 输入数组:
const inputArr = [ 'b', 'a', 'k', 'e', '', 'c', 'a', 'k', 'e', '', 'e', 'a', 't' ];
- 期望输出:
['bake','cake','eat'] - 原有错误实现:直接调用
join('')拼接所有元素
const result = inputArr.join(''); console.log(result); // 输出"bakecakeeat",所有单词连为一体无法拆分
错误原因
join('')方法会将数组中所有元素直接无分隔拼接,空字符串''在拼接时不会产生任何内容,相当于直接丢弃了原数组中空字符串作为单词分隔符的标记作用,最终只会得到一整段连续字符串,无法拆分出独立单词。
正确实现方案
提供两种简单易读的实现方式,可根据场景选择:
方案1:reduce遍历累加(逻辑直观,无兼容问题)
核心逻辑是遍历数组逐字符拼接,遇到空字符串就新增一个单词位:
const inputArr = [ 'b', 'a', 'k', 'e', '', 'c', 'a', 'k', 'e', '', 'e', 'a', 't' ]; const result = inputArr.reduce((wordList, char) => { // 遇到空串,新增空单词位准备拼接下一个单词 if (char === '') { wordList.push(''); } else { // 非空字符拼到当前最后一个单词的末尾 wordList[wordList.length - 1] += char; } return wordList; }, ['']); // 初始化第一个单词位为空字符串 console.log(result); // 输出 ['bake', 'cake', 'eat']
如果数组末尾存在多余空串,会导致结果最后多一个空字符串元素,只需要在返回前加一步
.filter(word => word !== '')即可过滤。
方案2:分隔符转换快速拆分(代码更简短)
核心逻辑是先用临时分隔符拼接数组,再以空串对应的双分隔符位置拆分,最后去掉单字符之间的临时分隔符:
const inputArr = [ 'b', 'a', 'k', 'e', '', 'c', 'a', 'k', 'e', '', 'e', 'a', 't' ]; const result = inputArr .join('|') // 用不会出现在内容里的|做临时分隔符,得到"b|a|k|e||c|a|k|e||e|a|t" .split('||') // 按空串对应的双|拆分,得到["b|a|k|e", "c|a|k|e", "e|a|t"] .map(word => word.replaceAll('|', '')); // 去掉单词内部的|分隔符 console.log(result); // 输出 ['bake', 'cake', 'eat']
内容的提问来源于stack exchange,提问作者Sudheer Kandula
相关产品推荐
相关产品推荐

