javascript - 断点调试 forEach - JS
问题描述
我正在尝试返回字符串中最后一个单词的长度,目前我正在努力调试。问题在于 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 不会更新。
(我确信有一种更简单的方法可以使用过滤器和映射来获得结果,但我想知道我当前的错误代码是否有一个简单的修复)
解决方案
现在,您的代码似乎返回倒数第二个单词的长度,而不是最后一个单词的长度。问题不在于 forEach,而在于您的操作方式。当您获取字符串中空格的索引并计算每个空格之间的距离时,这会排除第一个和最后一个单词,因为开头和结尾都没有空格。结果,记录倒数第二个单词的长度,而不是最后一个。
简单的解决方法是在while
循环之后添加这一行:
spaces.push(s.length);
这将确保最终的字长也将在以下 for 循环中计算。
如您所知,有一种更简单的方法可以做到这一点。
这是一个使用split
:
function lengthOfLastWord(string) {
let split = string.trim().split(" ");
return split[split.length - 1].length
}
推荐阅读
- javascript - Webpack watch 在 js 文件出错后崩溃
- node.js - 如何在 Mongoose/MongoDB 中获取当前日历日的文档
- sql - 我试图在表中添加多条记录的这段 sql 查询有什么问题?
- c# - 从 UWP 类库中的代码获取 XAML 资源
- python - numpy.asarray 中数组的形状
- ios-simulator - 我可以一次在多个 iOS 模拟器上运行我的 Expo 应用程序吗?
- firebase - 归档 Firebase 云 Firestore
- swift - 实体中的一个属性导致swift4中的值为nil
- javascript - 赛普拉斯:检查浏览器是否处于全屏模式
- docker - 如何在 tileserver-gl 服务器上使用自定义字体(字形)?