Javascript:使用.sort和compare函数查找数组中最长的单词

Javascript: Using .sort with compare function to find longest word in array

本文关键字:数组 单词 查找 函数 使用 sort compare Javascript      更新时间:2023-09-26

我是Javascript的初学者。在过去的几个小时里,我一直在为这个问题而困惑,所以我希望有人能帮助我理解我试图编写的代码中的逻辑。

我目前正在尝试编写一个函数,该函数将占用数组中最长的字符串,并将其传递回控制台。如果出现平局,控制台应返回字母最多的第一个单词。

我发现了一段很好的代码可以做到这一点,但我找不到将其转化为函数的方法。

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

我试过

var longestWord = function(arr) {
    sort(function (a, b) { return b.length - a.length })[0];
}

这行不通。我知道我做错了什么,但我不确定是什么。而且,我不能完全理解为什么会出现这个词。我可以理解函数比较两个变量的长度,但为什么0索引必须在末尾?

非常感谢您的帮助!!

您的函数不返回任何结果。另外,您可以调用sort函数,但不能调用Array.prototype.sort

这个确实有效:

var longestWord = function(arr) {
  return arr.sort(function (a, b) { return b.length - a.length })[0];
}
document.body.innerText = longestWord(['a', 'ab', 'abcdef', 'abcd', 'a', 'abcde']); // abcdef

回答您的"但为什么0索引必须在末尾"问题:Array.prototype.sort返回一个数组,您获得数组中的第一个项以获得最长的单词。这个[0]是一个数组下标,即"数组中的第一项"。

这两个片段是等价的

var arr = ['a', 'ab', 'abcdef', 'abcd', 'a', 'abcde']; 
// arr is ['a', 'ab', 'abcdef', 'abcd', 'a', 'abcde']
var arrSorted = arr.sort(function(a, b) { return b.length - a.length; });
// arrSorted is ['abcdef', 'abcde', 'abcd', 'ab', 'a', 'a']
var result = arrSorted[0];
// result is abcdef, the longest word

var arr = ['a', 'ab', 'abcdef', 'abcd', 'a', 'abcde']; 
// arr is ['a', 'ab', 'abcdef', 'abcd', 'a', 'abcde']
var result = arr.sort(function(a, b) { return b.length - a.length; })[0];
// result is abcdef, the longest word

不同的是,第二个没有将中间结果存储在变量中。

var my_array = ["a", "aaa", "aa", "aaaaaaa", "a"];
function longestString(arr) {
  return arr.sort(function(a,b) {
    return b.length - a.length;
  })[0];
}
longestString(my_array);

我建议你读一下https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort在使用sort()之前。在使用之前,请确保您了解irator。