繁体   English   中英

返回数组Javascript中最长字符串的第一次出现

[英]return first occurrence of longest string in array Javascript

我的任务是找到Array中最长的字符串的FIRST(不仅仅是最长的)出现。 尝试过以下方法,但仍会返回第二次出现的结果...

function maxDigits (arr) {
var toStr = arr.map(value => String(value));
var longest = toStr.reduce(function (a, b) { return a.length > b.length ? a : b; })
return Number(longest)
}
maxDigits([12, 12345, 67890, 34])  // Getting 67890, target is 12345

您的建议最好带有一些解释。 请不要jQuery。 非常感激!

如果下一个字符串的长度不大于该长度,则要保留当前字符串,因此,与其保持当前字符串的长度大于下一个字符串的长度,不如仅保留当前字符串,而是使该字符串的长度也相等。

比较长度时,请使用>=而不是>

a.length >= b.length ? a : b

或仅在当前长度小于下一个长度时才选择下一个:

a.length < b.length ? b : a

或仅在长度大于当前长度的情况下才选择下一个:

b.length > a.length ? b : a

例:

 function maxDigits(arr) { var toStr = arr.map(value => String(value)); var longest = toStr.reduce(function(a, b) { return b.length > a.length ? b : a; }) return Number(longest) } var result = maxDigits([12, 12345, 67890, 34]); console.log(result); 

或更简单地说...

 console.log( [12, 12345, 67890, 34] .map(function(a) { return a.toString() }) .reduce(function (a, b) { return a.length >= b.length ? a : b; }) ); 

仅减少一行即可进行以下操作;

 var nums = [12, 12345, 67890, 34]; result = nums.reduce((p,c) => Math.floor(Math.log10(p)) < Math.floor(Math.log10(c)) ? c : p); console.log(result); 

注意:假设您具有示例中所示的整数(而不是字符串),那么Math.floor(Math.log10(n))将为您提供n的数字位数减去1,这足以比较连续的数组项并保持最大或相等的第一

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM