我正在尝试打印出所有最长的字符串,而我所做的只是打印前 2 个字符串 [重复]
Posted
技术标签:
【中文标题】我正在尝试打印出所有最长的字符串,而我所做的只是打印前 2 个字符串 [重复]【英文标题】:I am tryng to print out all longst strngs and what i have managed to do is just print the first 2 strings [duplicate] 【发布时间】:2021-11-14 19:24:42 【问题描述】:
let printLongestStrings =(array) =>
let longStr = "";
for(let i = 0; i < array.length; i++)
if(array[i].length >= longStr.length)
longStr += array[i];
return longStr;
;
console.log(printLongestStrings(["time","ticking","bomb","countup"]));
【问题讨论】:
1) 您将字符串的.length
与字符串进行比较... 2) 您将连接到longStr
,这意味着它会越来越长... 3) 您是@987654324 @ing 在第一次迭代中,所以它永远不会尝试超过一个......
【参考方案1】:
这给了ticking
:
let printLongestStrings = array =>
const sorted = array.sort((a, b) => b.length - a.length);
let i = 0;
const returned = [sorted[i]];
while(sorted[i].length == sorted[i+1].length)
returned.push(sorted[++i]);
return returned;
console.log(printLongestStrings(["time", "ticking", "bomb", "countup"]));
【讨论】:
是否可以同时打印刻度和计数,因为它们的长度相同 @NATHANIEL 我已经编辑了答案,请查看【参考方案2】:您在检查所有字符串之前就返回了
let printLongestStrings = (array) =>
let longStr = "";
for (let i = 0; i < array.length; i++)
if(array[i].length >= longStr.length)
longStr = array[i];
return longStr;
;
console.log(printLongestStrings(["time", "ticking", "bomb", "countup"]));
上面将打印最后一个最长的字符串(即,如果超过 1 个输入是最长的长度,它将只输出最后一个)
如果你想要 所有 的字符串这个长度,下面会工作
let printLongestStrings = (array) =>
let longLen = 0;
let longStr = []
for (let i = 0; i < array.length; i++)
if(array[i].length == longLen)
longStr.push(array[i])
else if(array[i].length > longLen)
longStr = [];
longLen = array[i].length;
longStr.push(array[i])
return longStr;
;
console.log(printLongestStrings(["time", "ticking", "bomb", "countup"]));
【讨论】:
我试过使用它,但它只打印最后一个字符串或一个长字符串,理想的结果是打印所有最长的字符串。 @NATHANIEL 查看更新 太棒了 :) 谢谢...关于如何提高我的技能的任何建议? @NATHANIEL 练习。 酷,再次感谢您...可以说我不希望它输出数组?【参考方案3】:1) 应该有提前返回。最后你应该返回longStr
。
return longStr;
2)你应该比较array[i].length
和longStr.length
而不是longStr
array[i].length >= longStr.length
3) 您应该将最大的字符串分配给longStr
。你不应该将它附加到longStr
。
longStr = array[i].length >= longStr.length ? array[i] : longStr;
let printLongestStrings = (array) =>
let longStr = "";
for (let i = 0; i < array.length; i++)
longStr = array[i].length >= longStr.length ? array[i] : longStr;
return longStr;
;
console.log(printLongestStrings(["time", "ticking", "bomb", "countup"]));
替代解决方案:您可以使用reduce获得相同的结果
let printLongestStrings = (array) =>
return array.reduce((acc, curr) => (curr.length >= acc.length ? curr : acc));
;
console.log(printLongestStrings(["time", "ticking", "bomb", "countup"]));
如果你想要最大长度的字符串数组
let printLongestStrings = (array) =>
let map = new Map(),
largestLength = 0;
array.forEach((s) =>
if (s.length >= largestLength)
largestLength = s.length;
map.has(s.length) ? map.get(s.length).push(s) : map.set(s.length, [s]);
);
return [...map.get(largestLength)];
;
console.log(printLongestStrings(["time", "ticking", "bomb", "countup"]));
【讨论】:
不应该在输出中包含“滴答”吗?它的长度与“countup”相同。 我想出了相同的解决方案@Andy,但我认为需要 2 轮(循环)才能得到结果。但是我想一口气达到结果,这就是我使用forEach
和Map
的原因
尽管您的解决方案简洁且易于阅读、理解和维护。
我也很无聊,需要做一些有建设性的事情:)
大声笑,那真是太棒了。谢谢@HR01M8055 和@Andy。【参考方案4】:
您可以对您的代码进行一些修改,它会起作用:
-
比较时您没有检查
longStr
的长度。
您正在从第一次迭代返回。最后返回。
根据您对长度的比较,分配正确的值。 .length
更大的那个。
let printLongestStrings = (array) =>
let longStr = "";
for (let i = 0; i < array.length; i++)
longStr = (array[i].length >= longStr.length) ? array[i] : longStr;
return longStr;
;
console.log(printLongestStrings(["time", "ticking", "bomb", "countup"]));
【讨论】:
好的,但是有两个相同长度的字符串,但它只打印一个?以上是关于我正在尝试打印出所有最长的字符串,而我所做的只是打印前 2 个字符串 [重复]的主要内容,如果未能解决你的问题,请参考以下文章