You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从JavaScript数组中找出所有长度最长的字符串元素?

原代码逻辑缺陷

原代码返回结果不符合预期,核心是两个逻辑漏洞:

  • 初始longerWord为空字符串,遍历第一个元素"first"时,其长度5大于空串长度0,会直接被推入结果数组,后续遇到更长字符串时,没有清空之前存入的短长度结果,导致长度不达标的"first"残留在返回值里。
  • 判定条件只写了name.length > longerWord.length,仅在遇到比当前记录更长的字符串时触发操作,完全没有处理字符串长度等于当前最长值的场景,因此和"second"长度一致的"fourth"、"eighth"都不会被加入结果数组。
修正方案

正确的实现逻辑分两步即可:

  1. 先遍历一次数组,拿到所有字符串的最大长度值
  2. 再遍历数组,筛选出所有长度等于最大长度的元素,组成结果返回

最简实现可以直接用数组内置方法完成:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 20:15:37