首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >断点调试forEach - JS

断点调试forEach - JS
EN

Stack Overflow用户
提问于 2021-07-17 05:56:04
回答 1查看 30关注 0票数 0

我正在尝试返回字符串中最后一个单词的长度,目前我正在努力调试。问题出在forEach循环中,我遇到了一个不会更新空数组的断点。

代码语言:javascript
复制
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代码)

EN

回答 1

Stack Overflow用户

发布于 2021-07-17 07:07:00

现在,您的代码似乎返回倒数第二个单词的长度,而不是最后一个单词的长度。问题不在于forEach,而在于您使用的方式。当您对字符串中的空格进行索引并计算它们之间的距离时,这将排除第一个和最后一个单词,因为在字符串的最开始和最后没有空格。因此,会记录倒数第二个单词的长度,而不是最后一个单词的长度。

简单的解决方法是在while循环之后添加下面这一行:

spaces.push(s.length);

这将确保在下面的for循环中也会计算出最终的单词长度。

如您所知,有一种更简单的方法可以做到这一点。

下面是一个使用split的示例

代码语言:javascript
复制
function lengthOfLastWord(string) {
    let split = string.trim().split(" ");
    return split[split.length - 1].length
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68415631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档