仅返回最大元素的第一个值

时间:2016-10-31 21:03:37

标签: javascript arrays for-loop

我正在尝试返回数组中最大的元素。对于字符串,这意味着最长的字符串。如何仅返回最大元素的第一个实例。

我的代码:

function getLongestElement(arr) {
  var max = "";
  var counter = 0;
    for (var i = 0; i < arr.length; i++){
      if (arr[i].length > counter) max = arr[i]
      }
  return max; 
}

getLongestElement(['one', 'two', 'three', "thre1"]); // "thre1" not "three".

我不太确定这段代码有什么问题。无论最大值是什么,它只返回数组中的最后一个元素。帮助

4 个答案:

答案 0 :(得分:2)

counter初始化为0,但您永远不会更改其值,因此arr[i].length > counter的if语句始终为true(除非arr[i].length == 0)。要修复它,您需要跟踪循环内数组的最大元素:

// I renamed counter to maxLength for readability
function getLongestElement(arr) {
  var max;
  var maxLength = -1;
    for (var i = 0; i < arr.length; i++){
      if (arr[i].length > maxLength){
        maxLength = arr[i].length;
        max = i;
      }
    }
  return arr[max]; 
}

答案 1 :(得分:1)

首先,好的alghoritm不应该做任何假设。这意味着您的max不应该从“”开始,而是使用第一个数组的元素。您也不会编辑counter值,这是您的主要问题。但它是多余的,您可以在没有counter的情况下编写此函数。

function getLongestElement(arr) {
  if (arr.length < 1) return /* Some Exception */;
  var max = arr[0];
    for (var i = 1; i < arr.length; i++) {
      if (arr[i].length > max.length) max = arr[i];
    }
  return max; 
}

答案 2 :(得分:1)

您忘了更新counter

function getLongestElement(arr) {
  var max = "";
  var counter = 0;
    for (var i = 0; i < arr.length; i++){
      if (arr[i].length > counter) {
        max = arr[i];
        counter = max.length;
        }
      }
  return max; 
}

console.log(getLongestElement(['one', 'two', 'three', "thre1"])); // "thre1" not "three".

答案 3 :(得分:0)

如果您正在寻找实用的解决方案,我建议使用lodash的_.maxBy

_.maxBy(['one', 'two', 'three', "thre1"], function(str) {
   return str.length;
})

如果您正在为学习寻找理论解决方案,

function getLongestElement(arr) {
  var max;
  var counter = 0;

  for (var i = 0; i < arr.length; i++){
    if (arr[i].length > counter) max = arr[i]
    counter = Math.max(arr[i].length, counter)
  }

  return max; 
}

这里的关键是确保您将counter变量更新为当前最长的变量。