Какой код на JavaScript выполняет три последовательные операции: удаляет повторяющиеся элементы из массива чисел, умножает оставшиеся уникальные значения на 10 и вычисляет итоговую сумму полученных результатов?
Подробное объяснение
Правильный код использует цепочку методов массива: filter() для удаления дубликатов через сравнение индекса элемента с индексом его первого вхождения, map() для умножения каждого уникального числа на 10 и reduce() с начальным значением 0 для корректного суммирования. Ключевой момент — filter((n, i, arr) => arr.indexOf(n) === i) оставляет только первое появление каждого числа, эффективно устраняя повторы. Остальные варианты содержат ошибки: некорректные начальные значения в reduce(), неправильные условия фильтрации или ошибочную логику обработки элементов.
Часто задаваемые вопросы (FAQ)
1
Как удалить дубликаты из массива в JavaScript?
Для удаления дубликатов можно использовать метод filter() с проверкой arr.indexOf(n) === i, который оставляет только первое вхождение каждого элемента, или использовать Set: [...new Set(array)].
2
Как работает метод reduce() в JavaScript?
Метод reduce() применяет функцию к каждому элементу массива, накапливая результат. Он принимает функцию-редуктор и начальное значение аккумулятора, что важно для корректного суммирования чисел.
3
В чём разница между map() и forEach()?
Метод map() создаёт новый массив, преобразуя каждый элемент исходного, а forEach() просто выполняет функцию для каждого элемента без возврата нового массива. Для цепочек преобразований предпочтительнее map().
Типичные ошибки
1
Некорректное начальное значение в reduce()
Использование reduce((s, n) => s + n, 1) вместо reduce((s, n) => s + n, 0) приводит к завышению суммы на 1, так как аккумулятор инициализируется единицей, а не нулём.
2
Неверная логика удаления дубликатов
Применение filter(n => n === n) не фильтрует дубликаты, поскольку условие всегда истинно для чисел (кроме NaN), оставляя массив без изменений и искажая итоговый результат.
3
Ошибка в функции редьюсера
Использование reduce((s, n) => s, 0) игнорирует текущий элемент n, всегда возвращая начальное значение 0, что приводит к нулевой сумме независимо от данных в массиве.