查找数组中最长元素的长度 - JS

3

我需要找到给定数组中最长字符串的长度。如果数组为空,它应该返回0。

这是我的尝试:

function getLengthOfLongestElement(arr) {
  var biggestNum = 0;

 for(var i=0; i< arr.length; i++){
    if(arr[i] > biggestNum){
        biggestNum = arr[i];
     }
 }
}

var output = getLengthOfLongestElement(['one', 'two', 'three']);
console.log(output); // --> MUST RETURN 5

但是这个方法没有起作用。有什么想法或更好的选择吗?

5
此函数没有返回任何内容。 - JJJ
1
可能是在数组中找到最长字符串的重复问题。 - Weedoze
6个回答

5
为了给你提供另一种选择: Math.max 可以通过将长度映射到输入中作为参数传入,来获取最长的字符串:

function getLengthOfLongestElement(arr) {
  return Math.max(0,...arr.map(s=>s.length));
}

var output = getLengthOfLongestElement(['one', 'two', 'three']);
console.log(output); 


1
当输入数组为空时,它返回的不是 0 而是 -Infinity,这个问题需要解决。 - Redu
@Redu为true,添加了一个额外的0参数以防止这种情况发生。 - Me.Name

3
这显然是一项优化工作,可以简单地按以下方式实现:

var ss = ['one', 'two', 'three'],
    ln = ss.reduce((r,s) => r > s.length ? r : s.length, 0);
console.log(ln);


1
你应该测试arr[i].length而不是arr[i],并且你需要在函数的末尾返回biggestNum
function getLengthOfLongestElement(arr) {
  var biggestNum = 0;

  for (var i = 0; i < arr.length; i++) {
    if (arr[i].length > biggestNum) {
      biggestNum = arr[i].length;
    }
  }
  return biggestNum;
}

演示:

function getLengthOfLongestElement(arr) {
  var biggestNum = 0;

  for (var i = 0; i < arr.length; i++) {
    if (arr[i].length > biggestNum) {
      biggestNum = arr[i].length;
    }
  }
  return biggestNum;
}

var output = getLengthOfLongestElement(['one', 'two', 'three']);
console.log(output);


1
你应该使用字符串的 length 属性。所以,不要使用 arr[i],而是使用 arr[i].length
function getLengthOfLongestElement(arr) {
  var biggestNum = 0;

  for (var i = 0; i < arr.length; i++) {
    if (arr[i].length > biggestNum) {
      biggestNum = arr[i].length;
    }
  }

  return biggestNum;
}

1

My preferred solution is using reduce.

const arr = ['one', 'two', 'three'];
const maxLength = arr.reduce((acc, item) => Math.max(acc, item.length), 0);

console.log(maxLength)


这是一个不错的答案,但它并没有涵盖“如果数组为空,则应返回0”的情况。你应该将0作为reduce函数的第二个参数传递,作为初始值。 - Ross
1
好的,先生没错...刚刚更新了,感谢您提醒! - Oliver Theabould

0

For zero element just check if the array length is zero or not else arr[i].length will return the length of the string

function getLengthOfLongestElement(arr) {
  var biggestNum = 0;
  if (arr.length > 0) {
    for (var i = 0; i < arr.length; i++) {
      if (arr[i].length > biggestNum) {
        biggestNum = arr[i].length;
      }

    }
  } else if (arr.length == 0) {
    biggestNum = 0
  }
  return biggestNum

}

var output = getLengthOfLongestElement(['one', 'two', 'three']);
console.log(output);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接