我是JS的新手,正在尝试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;
};
答案 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];
};