В соответствии с the docs:
Способ сортировки() сортирует элементы массива на месте и возвращает массив . Сортировка не обязательно stable. Сортировка по умолчанию заказывается в соответствии с строковыми кодами Unicode.
[...]
Синтаксис
arr.sort()
arr.sort(compareFunction)
Параметры
compareFunction
Дополнительный
Speci fies функция, которая определяет порядок сортировки. Если этот параметр опущен, массив сортируется в соответствии со значением кода юникода каждого символа в соответствии с преобразованием строки каждого элемента.
Упор мой, так что вы в конечном итоге с чем-то вроде этого:
var str = "What if we try a super-long word such as otorhinolaryngology";
var charArray = str.split(" ");
// now charArray == ["What", "if", "we", "try", "a", "super-long", "word", "such", "as", "otorhinolaryngology"]
// when you take the length of each word and end up with
var wordArray = [4, 2, 2, 3, 1, 10, 4, 4, 2, 19];
// and if you use plain wordArray.sort() without specific sort function you get
wordArray = [1, 10, 19, 2, 2, 2, 3, 4, 4, 4];
// and once reversed it is
wordArray = [4, 4, 4, 3, 2, 2, 2, 19, 10, 1];
// this is why you end up with wordArray[0] == 4
В заключение, ваши номера становятся отсортированы как строки.
Чтобы получить их сортируются как числа, в порядке убывания, в функции вместо него вы должны сделать:
wordArray.sort(function(a, b) { return b - a; });
Вы также могли бы реализовать все функции в качестве однострочника:
function findLongestWord(str) {
return str.split(/\s+/).sort(function(a, b) { return b.length - a.length; })[0].length;
}
console.log("Longest word length = ", findLongestWord("The default sort order is according to string Unicode code points"));
console.log("Longest word length = ", findLongestWord("What if we try a super-long word such as otorhinolaryngology"));
'.sort()' не работает, как и следовало ожидать. Попробуйте предоставить ему обратный вызов, который правильно сортирует ваши номера. – Gavin
Каков результат, если вы удалите wordArray, reverse(); –
@AnnaJeanine Without '.reverse()' i get '1' –