Я работаю над проблемой LeetCode, я хочу присвоить переменную отсортированной копии массива.
sortedHeights = heights.toSorted()
Однако это возвращает следующую ошибку heights.toSorted is not a function
.
Я искал проблему на MDN и нашел следующий фрагмент кода:
const months = ["Mar", "Jan", "Feb", "Dec"];
const sortedMonths = months.toSorted();
console.info(sortedMonths); // ['Dec', 'Feb', 'Jan', 'Mar']
console.info(months); // ['Mar', 'Jan', 'Feb', 'Dec']
Я также пытаюсь запустить этот фрагмент кода в WebStorm и получаю ту же ошибку, однако, когда я запускаю его в браузере, он работает. Почему это?
.toSorted()
это новый метод. Как вы можете видеть в документе MDN, на который вы ссылаетесь, он еще не поддерживается в node.js.
Во-первых, важно отметить, что сортировка массива предполагает расположение его элементов в определенном порядке на основе некоторых критериев. В этом случае критерием является индекс букв, где каждой букве присваивается числовое значение, например, A присваивается значение 1, а B присваивается значение 2.
Чтобы выполнить эту сортировку, вы можете использовать функцию под названием toSorted()
, которая упорядочивает элементы массива в соответствии с их индексами. Ожидаемый результат для данного входного массива будет следующим:
[ "Dec", "Feb", "Jan", "Mar"]
Для этого можно использовать постоянный массив месяцев, содержащий названия всех двенадцати месяцев года. Таким образом, вы можете получить доступ к индексу каждого месяца в массиве, что позволит вам отсортировать массив в соответствии с желаемыми критериями.
const months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
На момент написания этого ответа Array.prototype.toSorted() поддерживается Node.js версии 20+. Большинство разработчиков используют версию Node.js LTS (в настоящее время версия 18). Поэтому, если вы используете Node.js версии 19, 18 или ниже в WebStorm, .toSorted()
не поддерживается.
Что касается LeetCode, я вижу, что в настоящее время он использует Node.js 16 для запуска вашего кода. Таким образом, вы можете пока прибегнуть к этому альтернативному (и фактически эквивалентному) коду:
sortedHeights = [...heights].sort()
Также обратите внимание, что хотя .toSorted()
в настоящее время поддерживается в Chrome и Edge (начиная с версии 110), а также в Safari и некоторых других браузерах, он не поддерживается Firefox (на момент ответа) — на тот случай, если вы сделали предположение, что он работает в все основные браузеры.
Проверьте Array.prototype.toSorted() раздел совместимости браузера MDN, чтобы узнать последние сведения о поддержке.
Работает только в новых браузерах, так как он очень новый. Вы можете увидеть таблицу совместимости на этой странице MDN.