在数组JavaScript中查找最长的单词

时间:2018-07-04 16:50:11

标签: javascript arrays

我是代码新手,因此我遇到了在字符串数组中找到最长单词的挑战。我遵循了一个在句子中找到最长字符串的示例,并提出了以下建议:

function longestString(strs) {
  return strs.sort(function(a, b) {return b.length - a.length})[0];
}

longestString('boop', 'bloomburg', 'hello');

它没有用,我也不知道怎么了

6 个答案:

答案 0 :(得分:3)

您没有传递数组,也不为此使用sort,这是最慢的方法。您可以简单地使用for循环或使用更好的语法,而应使用reduce。

console.log(longestStringForLoop(['boop', 'bloomburg', 'hello']));
console.log(longestStringReduce(['boop', 'bloomburg', 'hello']));

function longestStringForLoop(arr) {
  let word = "";
  for (let i = 0; i < arr.length; i++) {
    if (word.length < arr[i].length) {
      word = arr[i];
    }
  }
  return word;
}

function longestStringReduce(arr) {
  return arr.reduce((a, b) => a.length < b.length ? b : a, "");
}


请注意,像您一样传递多个字符串之间的巨大区别

longestString('boop', 'bloomburg', 'hello');

并传递字符串数组

longestString(['boop', 'bloomburg', 'hello']);

答案 1 :(得分:1)

您可以使用rest parameter...)语法使我们可以将不确定数量的参数表示为数组。

function longestString(...strs) {
  return strs.sort(function(a, b) {return b.length - a.length})[0];
}

console.log(longestString('boop', 'bloomburg', 'hello'));

文档:rest parameter


还有一个选择是使用reduce而不是sort。与使用reduce

相比,使用sort的重复次数更少

function longestString(...strs) {
  return strs.reduce((c, v) => c.length > v.length ? c : v);
}

console.log(longestString('boop', 'bloomburg', 'hello'));

答案 2 :(得分:0)

致电longestString时:

longestString('boop', 'bloomburg', 'hello');

...,它传递三个字符串参数,而不是单个字符串数组参数。您可以将调用转换为传递Array:

longestString(['boop', 'bloomburg', 'hello']);

...或者对于现代JS,您可以使用...更改函数接受变量参数:

function longestString(...strs) {
  return strs.sort(function(a, b) {return b.length - a.length})[0];
}

答案 3 :(得分:0)

感谢您的帮助! 我实际上使用for循环

得到了答案
function longestString(strs) {
let longest = '';
for (let i = 0; i < strs.length; i++) {
if (strs[i].length > longest.length)
longest = strs[i];
}
return longest;
}

答案 4 :(得分:-1)

这是一种实现方法:

function longestword (str){
   if(str == undefined || str == null)
      return null;
   var w = str.split(" ");
   var result = null;
   int count = 0;
   for(var i = 0; i < w.lenght; i++){
      if(w[i].length > count){
          count = w[i].lenght;
          result = w[i];
      }
   }
   return result;
}

调用函数传递字符串。

var lword = longestword("What is the longest word of my string?");

答案 5 :(得分:-4)

Strs不是数组。这是一个字符串。

因此,当您运行.sort方法时,它仅适用于数组。

有很多方法可以使它起作用,但是在ES6中,有rest参数可以让我们轻松快速地将字符串作为数组传递:

function longestString(...strs) {
  return strs.sort(function(a, b) {return b.length - a.length})[0];
}

longestString('boop', 'bloomburg', 'hello');