.toSorted() работает только в браузере

Я работаю над проблемой 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 и получаю ту же ошибку, однако, когда я запускаю его в браузере, он работает. Почему это?

Работает только в новых браузерах, так как он очень новый. Вы можете увидеть таблицу совместимости на этой странице MDN.

VLAZ 13.04.2023 16:08
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
1 033
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

.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, чтобы узнать последние сведения о поддержке.

Другие вопросы по теме