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

时间:2017-08-07 10:21:18

标签: javascript arrays

我的任务是找到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。 非常感谢!

3 个答案:

答案 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)

或者更简单地说......

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

答案 2 :(得分:0)

只需要一行减少,您可以按照以下步骤进行操作;

&#13;
&#13;
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;
&#13;
&#13;

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