系列文章
- [ CodeWar ] - 001:过滤重复字符
- [ CodeWar ] - 002:最大和最小值
- [ CodeWar ] - 003:判断质数
- [ CodeWar ] - 004:处理数组元素
- [ CodeWar ] - 005:用户分组
- [ CodeWar ] - 006:数组比对
- [ CodeWar ] - 007:找不同
- [ CodeWar ] - 008:分割字符串
题目

需求:
- 检测传入字符串,并且以 2 为单位长度分割字符串
- 如果字符串为偶数则刚好分割完毕
- 如果字符串长度为奇数则在末尾添加
_
解析
这道题的思路还是比较简单的:
- 先考虑空字符串的情况,返回一个
[] - 然后直接分割字符串,如果字符串长度为偶数则刚好满足情况
- 否则我们只需要在末尾添加一个
_即可
function solution(str) {
const ret = []
if (str.length === 0) {
return []
} else {
for (let i = 0; i < str.length; i = i + 2) {
ret.push(str.slice(i, i + 2))
}
}
return ret.map((s) => (s.length !== 2 ? `${s}_` : s))
}
优化
显然,上面的解法有写过于繁琐,那么有没有别的更好的方案呢?
答案肯定是有的,从题目的输入与输出(str -> arr),我们应该能想到一个函数:match()
这里简单说一下思路:
- 首先为每一个输入的字符串在末尾添加一个
_ - 通过
match()匹配连续的两个字符,那么就会有以下情况- 空字符串,什么匹配不到
- 字符串长度为奇数,算上加上的
_则为偶数,刚好匹配完成 - 字符串长度为偶数,算上加上的
_则为奇数,最后的_则被忽略
那么代码就很容易书写了:
const solution = (str) => `${str}_`.match(/../g) || []