为何spinWords函数输出存在undefined?如何正确反转长度≥5的单词
问题原因及修复方案
出现undefined的直接原因
字符串索引越界:你在反转单词的内层循环中,初始值设为j = curr.length,但字符串的索引范围是0到curr.length - 1,访问curr[curr.length]会返回undefined,这些undefined被拼接到结果里,就出现了输出中的异常内容。
代码存在的其他问题
- 函数名拼写错误:
unction漏写了开头的f,应为function - 判断条件不符合需求:你需要反转长度超过5个字母的单词,但代码用的是
curr.length >=4,会错误反转4个字母的单词 - 未处理短单词:代码仅拼接符合条件的反转单词,完全忽略了长度不满足的单词(比如示例中的"Hey"),不符合原需求
- 结果拼接逻辑错误:全局变量
reversedWord会把所有反转单词直接连在一起,没有保留原有的空格分隔
修复后的代码(两种实现方式)
方式1:使用map方法(更简洁)
function spinWords(string){ let newArr = string.split(' '); let resultArr = newArr.map(word => { // 仅反转长度超过5的单词 if (word.length > 5) { return word.split('').reverse().join(''); } return word; }); return resultArr.join(' '); } console.log(spinWords("Hey fellow warriors")); // 输出:Hey wollef sroirraw
方式2:基于原for循环修改
function spinWords(string){ let newArr = string.split(' '); let result = []; for(let i = 0; i < newArr.length; i++){ let curr = newArr[i]; if (curr.length > 5){ let reversed = ""; // 从最后一个有效索引(length-1)开始循环 for(let j = curr.length - 1; j >= 0; j--){ reversed += curr[j]; } result.push(reversed); } else { result.push(curr); } } return result.join(' '); } console.log(spinWords("Hey fellow warriors")); // 输出:Hey wollef sroirraw
内容的提问来源于stack exchange,提问作者Furkan Zengin
相关产品推荐
相关产品推荐

