如何按长度比较字符串与字符串数组?修复getClosestWord函数逻辑
修复getClosestWord函数逻辑
首先确认getDistanceByLength函数逻辑正确,它负责计算两个字符串长度的绝对差:
function getDistanceByLength(str1, str2) { return Math.abs(str1.length - str2.length); }
原getClosestWord函数的问题在于遍历过程中遇到第一个符合阈值的元素就直接返回,没有遍历完所有元素找到长度差最小的最优解。以下是修复后的函数:
function getClosestWord(target, words, threshold = 2) { let minDistance = Infinity; let closestWord = target; for (const word of words) { const distance = getDistanceByLength(target, word); // 找到更小的差值时,更新最小差值和对应单词 if (distance < minDistance) { minDistance = distance; closestWord = word; } // 若需处理多个差值相同的最优解,可在此添加逻辑(比如保留最后一个遇到的) } // 遍历结束后判断最小差值是否在阈值内,返回对应结果 return minDistance <= threshold ? closestWord : target; }
修复逻辑说明
- 初始化
minDistance为无穷大,确保任何实际计算出的长度差都能覆盖它;closestWord默认设为目标字符串,作为兜底返回值。 - 遍历整个单词数组,逐个计算当前单词与目标字符串的长度差:
- 只要当前单词的长度差小于已记录的最小差值,就更新最小差值和对应的最优单词。
- 遍历完成后,再判断最小差值是否在设定的阈值范围内:
- 符合条件则返回最优单词,否则返回原目标字符串。
测试示例(针对数组["bed", "bank", "fence", "bridges"])
- 目标字符串为
"test"(长度4):最小长度差为0(对应"bank"),返回"bank" - 目标字符串为
"apple"(长度5):最小长度差为0(对应"fence"),返回"fence" - 目标字符串为
"verylongword"(长度12):最小长度差为5(对应"bridges"),若阈值设为4,则返回原字符串"verylongword"
内容的提问来源于stack exchange,提问作者antjuh
相关产品推荐
相关产品推荐

