Вернуть массив от 1 до n, где числа, кратные 3, заменены на 'fizz', кратные 5 - на 'buzz', а кратные и 3, и 5 одновременно - на 'fizzbuzz'
Дан массив:
const nums = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
Напишите функцию, который возвращает массив чисел от 1 до n, где n — целое число, которое функция принимает в качестве параметра, при этом:
выводит 'fizz' вместо чисел, кратных 3; выводит 'buzz' вместо чисел, кратных 5; выводит 'fizzbuzz' вместо чисел, кратных и 3, и 5.
Например:
fizzBuzz(nums) // [1,2,"fizz",4,"buzz","fizz",7,8,"fizz","buzz",11,"fizz",13,14,"fizzbuzz",16]
Теория и разбор
Оператор % возвращает остаток от деления: выражение a % b показывает, сколько «останется» после деления a на b.
Кратность проверяется так: если x % 3 === 0, то число делится на 3 без остатка, значит оно кратно 3.
Для FizzBuzz достаточно трёх проверок, но важно их расположение.
- Сначала проверяется «кратно 3 и 5 одновременно»; это удобно записать как
x % 15 === 0. - Затем проверяются отдельные случаи
x % 3 === 0иx % 5 === 0. - В конце возвращается исходное число, если ни одно правило не подошло.
Почему 15: это число делится и на 3, и на 5, поэтому оно является короткой проверкой «одновременно кратно 3 и 5».
Схема и мини-таблица
Схема принятия решения для одного элемента
получено число x
если x % 15 === 0 → "fizzbuzz"
иначе если x % 3 === 0 → "fizz"
иначе если x % 5 === 0 → "buzz"
иначе → x
Таблица примеров для отдельных значений
| Значение | Проверка | Результат |
|---|---|---|
| 3 | 3 % 3 === 0 | "fizz" |
| 5 | 5 % 5 === 0 | "buzz" |
| 15 | 15 % 15 === 0 | "fizzbuzz" |
| 16 | не кратно 3 и не кратно 5 | 16 |
Кратко: по условию требуется преобразовать уже данный массив; для каждого элемента выполняется проверка остатка % (сначала на 15, потом на 3 и 5), а итог собирается в новый массив (чаще всего через map).