如何从字符串中提取中间字符?CodeWars编程题实现咨询
现有代码存在的问题
- 运算符优先级错误:你写的
s.length-1/2会优先计算1/2得到0.5,实际执行逻辑为s.length - 0.5,得到的是小数索引,字符串无法通过小数索引获取正确字符,正确写法应该加括号调整优先级:(s.length - 1) / 2。 - 存在冗余的for循环:不需要遍历整个字符串,字符串长度是固定值,直接计算中间位置取值即可,循环逻辑完全多余,且每次循环都会重复给
middle赋值,没有实际作用。 - 奇偶判断重复执行:两个if判断每次循环都会执行,完全可以提前计算长度的奇偶性,不需要重复判断。
正确实现方案
思路:先获取字符串长度,根据长度奇偶性直接定位中间字符位置即可:
const getMiddle = (s) => { const len = s.length; const mid = Math.floor(len / 2); // 奇数长度取中间1位,偶数长度取中间2位 return len % 2 === 1 ? s[mid] : s[mid - 1] + s[mid]; }
也可以用substr方法写得更简洁:
const getMiddle = s => s.substr(Math.ceil(s.length / 2 - 1), s.length % 2 === 1 ? 1 : 2);
内容的提问来源于stack exchange,提问作者user16910942
相关产品推荐
相关产品推荐

