找到数组中的第三大词 - CoderByte - javascript

时间:2014-01-14 06:11:03

标签: javascript arrays

我是JS的新手,正在尝试CoderByte。下面的问题我已经绕圈子试图解决它。我坚持如何达到第三大词。提前感谢您的指导。

来自CoderByte

的问题

使用JavaScript语言,让函数ThirdGreatest(strArr)获取存储在strArr中的字符串数组并返回in中的第三个字。例如:如果strArr是[“hello”,“world”,“之前“,”all“]你的输出应该是world,因为”before“是6个字母长,而”hello“和”world“都是5,但输出应该是world,因为它出现在数组中的最后5个字母单词。如果strArr是[“hello”,“world”,“after”,“all”],则输出应该在后面,因为前三个单词都是5个字母长,所以返回最后一个。该数组至少有三个字符串,每个字符串只包含字母。

var arr = ["hello", "world", "before", "all"]; => world   sorted = ["all", "hello", "world", "before"]
var arr2 = ["hello", "world", "after", "all"]; => after   sorted = ["all", "hello", "world", "after"]
var arr3 = ['all', 'mary', 'jenn', 'frank', 'marshall', 'bob', 'sam', 'may']; => sorted = ["marshall", "frank", "mary", "jenn", "all", "bob", "sam", "may"]

var thirdGreatest = function (arr) {
    var arr2 = arr.sort(function(a,b){ return b.length - a.length});
    return arr2;
};

3 个答案:

答案 0 :(得分:1)

你几乎就在那里,一个已排序,只返回数组中的第三个项目:

var thirdGreatest = function (arr) {
    var arr2 = arr.sort(function(a,b){ return b.length - a.length});
    return arr2[2];
};

记住数组是零索引的!

答案 1 :(得分:1)

排序很昂贵,并且可能会改变相等长度的单词的顺序。另外,我们只对单词的长度感兴趣,而不是按字母顺序排列。

这段代码会在CoderByte给出的每个案例中返回正确的结果:

function ThirdGreatest(strArr) { 
  longest = '';
  second = '';
  third = '';
  for (idx in strArr) {
    current = strArr[idx];
    if (current.length > longest.length) {
      third = second;
      second = longest;
      longest = current;
    } else if (current.length > second.length) {
      third = second;
      second = current;
    } else if (current.length > third.length) {
      third = current;
    }
  }
  return third;          
}

它保留了迄今为止看到的最长的三个单词,如果遇到比三个单词中的任何一个更长的单词,它会将较短的单词推出。

答案 2 :(得分:0)

为什么不对它进行排序然后获取数组的第三项?

var thirdGreatest = function (arr) {
    // sorts the array
    var arr2 = arr.sort();

    // gets the third item (third largest)
    return arr2[2];
};