【问题标题】:Javascript: Using .sort with compare function to find longest word in arrayJavascript:使用 .sort 和比较函数来查找数组中的最长单词
【发布时间】:2015-12-07 05:53:51
【问题描述】:

我是 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索引必须在末尾?

非常感谢任何帮助!

【问题讨论】:

  • 附注:排序是一种昂贵的方法,因为即使是最好的情况也是 O(nlog n)。最好使用 for 循环遍历数组,并将每个单词与 longestWordFound 变量进行比较,该变量为 O(1)。

标签: javascript arrays function sorting compare


【解决方案1】:

你的函数什么也不返回。此外,您调用 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] 是一个数组下标,即“数组中的第一项”。

这两个sn-ps是等价的

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

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

【讨论】:

  • 出于某种原因,我认为.sort 没有返回相同的对象,我的错。
  • 非常感谢!这真的帮助我理解了为什么我的代码不起作用。
【解决方案2】:
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。

【讨论】:

  • 非常感谢您的建议!
猜你喜欢
  • 2018-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
相关资源
最近更新 更多