我正在尝试返回字符串中最后一个单词的长度,目前我正在努力调试。问题出在forEach循环中,我遇到了一个不会更新空数组的断点。
function lengthOfLastWord(s) {
let spaces = [];
let space = ' ';
let spaceInd = s.indexOf(space);
while (spaceInd != -1) {
spaces.push(spaceInd);
spaceInd = s.indexOf(space, spaceInd + 1);
}
let nonSpaces = [];
let wordArray = [];
for(let i = 0; i<spaces.length; i++) {
nonSpaces.push((spaces[i + 1] - spaces[i]) - 1);
}
nonSpaces.forEach(function(number) {
if (number >= 1) {
wordArray.push(number);
}
})
let words = wordArray[wordArray.length - 1];
if ((wordArray.length === 0)) {
console.log(0);
} else {
console.log(words);
}
};
lengthOfLastWord("this is my test string");如果我忽略断点,我会得到正确的结果,但是我似乎不明白为什么空的wordArray不会更新。
(我相信有一种更简单的方法可以使用过滤器和映射来获得结果,但我想知道是否有简单的方法来修复我当前的but代码)
发布于 2021-07-17 07:07:00
现在,您的代码似乎返回倒数第二个单词的长度,而不是最后一个单词的长度。问题不在于forEach,而在于您使用的方式。当您对字符串中的空格进行索引并计算它们之间的距离时,这将排除第一个和最后一个单词,因为在字符串的最开始和最后没有空格。因此,会记录倒数第二个单词的长度,而不是最后一个单词的长度。
简单的解决方法是在while循环之后添加下面这一行:
spaces.push(s.length);
这将确保在下面的for循环中也会计算出最终的单词长度。
如您所知,有一种更简单的方法可以做到这一点。
下面是一个使用split的示例
function lengthOfLastWord(string) {
let split = string.trim().split(" ");
return split[split.length - 1].length
}https://stackoverflow.com/questions/68415631
复制相似问题