如何从JavaScript数组中找出所有长度最长的字符串元素?
原代码逻辑缺陷
原代码返回结果不符合预期,核心是两个逻辑漏洞:
- 初始
longerWord为空字符串,遍历第一个元素"first"时,其长度5大于空串长度0,会直接被推入结果数组,后续遇到更长字符串时,没有清空之前存入的短长度结果,导致长度不达标的"first"残留在返回值里。 - 判定条件只写了
name.length > longerWord.length,仅在遇到比当前记录更长的字符串时触发操作,完全没有处理字符串长度等于当前最长值的场景,因此和"second"长度一致的"fourth"、"eighth"都不会被加入结果数组。
修正方案
正确的实现逻辑分两步即可:
- 先遍历一次数组,拿到所有字符串的最大长度值
- 再遍历数组,筛选出所有长度等于最大长度的元素,组成结果返回
最简实现可以直接用数组内置方法完成:
const myArr = ["first", "second", "third", "fourth", "fifth", "sixth", "seven", "eighth"] function longerStrings(arr) { // 计算数组内字符串的最大长度 const maxStrLength = Math.max(...arr.map(item => item.length)) // 过滤出所有长度等于最大值的元素 return arr.filter(item => item.length === maxStrLength) } // 执行验证 console.log(longerStrings(myArr)) // 输出: ["second", "fourth", "eighth"]
如果需要兼容不支持ES6展开运算符的运行环境,也可以用基础循环实现,逻辑完全一致:
function longerStrings(arr) { let maxLen = 0 // 第一轮遍历找最大长度 for (const item of arr) { if (item.length > maxLen) { maxLen = item.length } } const result = [] // 第二轮遍历收集符合要求的元素 for (const item of arr) { if (item.length === maxLen) { result.push(item) } } return result }
内容的提问来源于stack exchange,提问作者Shihab Haque
相关产品推荐
相关产品推荐

