Javascript:使用带有比较功能的.sort来查找数组中最长的单词

时间:2015-12-07 05:53:51

标签: javascript arrays function sorting compare

我是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索引必须在最后呢?

非常感谢任何帮助!!

2 个答案:

答案 0 :(得分:3)

你的函数什么也没有返回。另外,您调用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指数必须在最后?#34;问题: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

不同之处在于第二个不会将中间结果存储在变量中。

答案 1 :(得分:0)

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。