如何修改JavaScript函数以输出所有相同最长长度的字符串?
解决思路与修改方案
首先咱们来分析下原函数的问题:它只用了单个变量longWord来存储最长字符串,每次碰到更长的就直接替换掉之前的内容,自然只能保留第一个最长的那个。要返回所有长度相同的最长字符串,咱们有两种直观的修改思路,下面分别说明:
方法一:先找最长长度,再过滤数组
这个方法逻辑清晰,新手也容易理解:
- 先遍历数组,找出所有字符串里的最大长度
- 再用这个长度去过滤数组,把所有符合长度要求的字符串挑出来
修改后的代码如下:
var words = ["one", "two", "tree", "four", "five", "six", "seven", "eight", "nine"]; function LongestWords(array) { // 第一步:获取最长字符串的长度 let maxLength = 0; for (let i = 0; i < array.length; i++) { if (array[i].length > maxLength) { maxLength = array[i].length; } } // 第二步:过滤出所有长度等于maxLength的字符串 return array.filter(word => word.length === maxLength); } console.log(LongestWords(words)); // 输出: ["seven", "eight"]
方法二:遍历过程中动态维护结果数组
这种方法只需要一次遍历,效率稍高一点:
- 初始化一个空数组来存结果
- 遍历每个字符串时,对比当前字符串长度和结果数组中元素的长度(如果结果数组不为空)
- 如果当前字符串更长:清空结果数组,把当前字符串加进去
- 如果长度相等:直接把当前字符串追加到结果数组里
- 如果更短:直接跳过
代码示例:
var words = ["one", "two", "tree", "four", "five", "six", "seven", "eight", "nine"]; function LongestWords(array) { let longestWords = []; let maxLength = 0; for (let i = 0; i < array.length; i++) { const currentWord = array[i]; const currentLength = currentWord.length; if (currentLength > maxLength) { // 发现更长的,更新最大长度并重置结果数组 maxLength = currentLength; longestWords = [currentWord]; } else if (currentLength === maxLength) { // 长度相同,加入结果数组 longestWords.push(currentWord); } // 长度更短的情况直接跳过 } return longestWords; } console.log(LongestWords(words)); // 输出: ["seven", "eight"]
额外小提示
- 原代码里的
i没有用let或var声明,会变成全局变量,这是个容易踩的小坑,修改后的代码里都加上了let来避免这个问题。 - 如果输入数组是空的,两种方法都会返回空数组,逻辑上是合理的。
内容的提问来源于stack exchange,提问作者hoppdev
相关产品推荐
相关产品推荐

