查找数组中第三大单词-CoderByte-javascript

查找数组中第三大单词-CoderByte-javascript,javascript,arrays,Javascript,Arrays,我是JS新手,正在试用CoderByte。下面的问题我绕了一圈想弄明白。我被困在如何找到第三大单词上。提前感谢您的指导 问题来自 使用JavaScript语言,让函数ThirdGreatest(strArr)获取strArr中存储的字符串数组,并返回in中的第三大单词。例如:如果strArr是[“hello”、“world”、“before”、“all”],那么输出应该是world,因为“before”是6个字母长,“hello”和“world”都是5个字母,但是输出应该是world,因为它是数

我是JS新手,正在试用CoderByte。下面的问题我绕了一圈想弄明白。我被困在如何找到第三大单词上。提前感谢您的指导

问题来自

使用JavaScript语言,让函数ThirdGreatest(strArr)获取strArr中存储的字符串数组,并返回in中的第三大单词。例如:如果strArr是[“hello”、“world”、“before”、“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;
};

就快到了,一个排序,只需从数组中返回第三项:

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

记住数组是零索引的

您就快到了,一个已排序,只需从数组中返回第三项:

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

记住数组是零索引的

为什么不对其排序,然后获取数组的第三项

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

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

为什么不对它进行排序,然后得到数组的第三项呢

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

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

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

这段代码返回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;          
}

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

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

这段代码返回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;          
}


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

我认为这是不对的。因为如果更仔细地观察问题,每个数组的结果都是不同的。这实际上是一个棘手的问题,因为它不仅仅是数组的第三项。排序不会在没有回调的情况下比较数组中元素的长度。返回
“hello”
作为输入
[“hello”,“world”,“before”,“all”]
:-(我认为这是不对的。如果你更仔细地看问题,每个数组的结果都是不同的。这实际上是一个棘手的问题,因为它不仅仅是数组的第三项。排序不会在没有回调的情况下比较数组中元素的长度。对于输入
[“hello”,“world”,“before”,“all”]
:-(我认为这是不对的。如果你更仔细地看问题,每个数组的结果都是不同的。这实际上是一个棘手的问题,因为它不仅仅是数组的第三项。这是按数组中每个字符串的长度排序-对sort()的回调)对数组中的每对元素调用。如果回调为负,则a较长,因此应在b之后。如果回调为零,则它们的长度相同,因此它们的位置很好。如果回调为正,则b较长,且b应在a之后。由于已对其进行排序,因此返回已排序数组中的第三个条目将是第三个lon最大单词。如果数组很大,排序速度会很慢。请参阅我的答案以获得更快的解决方案。我认为这是不对的。如果你更仔细地看问题,每个数组的结果都是不同的。这实际上是一个棘手的问题,因为它不仅仅是数组的第三项。这是根据数组中每个字符串的长度进行排序-对sort()的回调对数组中的每对元素调用。如果回调为负,则a较长,因此应在b之后。如果回调为零,则它们的长度相同,因此它们的位置很好。如果回调为正,则b较长,且b应在a之后。由于已对其进行排序,因此返回已排序数组中的第三个条目将是第三个lon最大单词。如果数组很大,排序速度会很慢。有关更快的解决方案,请参阅我的答案。strArr是[“hello”、“world”、“after”、“all”]=>之后,但之后是第四大,排在“all”、“hello”、“world”之后",对吗?你能描述一下从排序数组返回第三项的情况吗?@Andrew-ya这是正确的,尽管问题不是这样说的。它说“after”是“第三大”@Maus-如果你看
arr3
的话,模式与
的“jenn”
应该是第三大,尽管她可能在列表中排名第四。@jstone,您的意思是您需要找到长度最大的in STR,即[“你好”,“世界”,“在”]之后,然后选择第三个。如果是这样,那么只有一个最大的STRSTR STRAR是[“你好”,“世界”,“在”,“所有”]=>之后,但在“所有”,“你好”,“世界”之后是第四大STR STRR,对吗?你能描述一下从排序数组返回第三项的情况吗?@Andrew-ya这是正确的,尽管问题不是这样说的。它说“after”是“第三大”@Maus-如果你看
arr3
的话,模式与
的“jenn”
应该是第三大,尽管她可能是列表中的第四个。@jstone,您的意思是您需要找到长度最大的in str,即[“你好”,“世界”,“在”]之后],然后选择第三个。如果是,那么只有一个最大的str呢