JavaScript中split返回数组用splice删空串仍残留该如何解决
JS获取字符串最后一个单词及长度的问题修复
代码出错的核心原因
- 第一个版本用for循环+splice删除空字符串的逻辑有缺陷:splice会修改原数组长度,删除元素后后续元素索引会前移,循环i直接自增会跳过下一个元素,导致空字符串无法全部清理干净。
- 第二个版本的map逻辑不生效:map不会修改原数组,只会返回新数组,你没有接收map的返回值,原sentence数组完全没有变化;且空字符串替换空格后依旧是空字符串,无法达到过滤效果。
- 两个版本共有的逻辑缺陷:你最开始就用未处理的split结果给
theLastWord赋值,就算后续处理了sentence数组,也没有更新这个变量,最终输出的还是最初拿到的空值。
正确实现方案
方案1:split后过滤空字符串
用filter方法直接过滤掉split产生的所有空字符串,逻辑简单易读:
var lengthOfLastWord = function(s) { // 分割后过滤所有空字符串,也可以简写为.filter(Boolean) const validWords = s.split(' ').filter(item => item.length > 0); // 处理全空格的边界场景 const lastWord = validWords.length ? validWords.pop() : ''; const result = `The last word is "${lastWord}" with length ${lastWord.length}.`; console.log(result); return result; }; // 测试用例 lengthOfLastWord(' god. I hate leetcode why '); // 输出:The last word is "why" with length 3.
方案2:更简洁的正则实现
先trim清理首尾空格,再用匹配多空格的正则分割,直接得到无空元素的单词数组:
var lengthOfLastWord = function(s) { // trim去掉首尾空格,/\s+/匹配1个或多个空格分割,避免中间多空格产生空元素 const lastWord = s.trim().split(/\s+/).pop() || ''; const result = `The last word is "${lastWord}" with length ${lastWord.length}.`; console.log(result); return result; };
内容的提问来源于stack exchange,提问作者user5481714
相关产品推荐
相关产品推荐

