我的任务是找到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。 非常感谢!
答案 0 :(得分:4)
如果下一个字符串长度不是更大,你想保留当前字符串,所以不要只保留当前字符串,只要它的长度大于下一个字符串,如果长度相等,也要保留当前字符串。
比较长度时使用>=
代替>
:
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);
答案 1 :(得分:0)
或者更简单地说......
console.log(
[12, 12345, 67890, 34]
.map(function(a) { return a.toString() })
.reduce(function (a, b) { return a.length >= b.length ? a : b; })
);
&#13;
答案 2 :(得分:0)
只需要一行减少,您可以按照以下步骤进行操作;
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);
&#13;
注意:假设您的示例中显示的是整数(而不是字符串),那么Math.floor(Math.log10(n))
将为您提供n
小于1的位数,这足以比较连续数组项目并保持最大或第一等于。