Вернуть массив от 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

Таблица примеров для отдельных значений

ЗначениеПроверкаРезультат
33 % 3 === 0"fizz"
55 % 5 === 0"buzz"
1515 % 15 === 0"fizzbuzz"
16не кратно 3 и не кратно 516

Кратко: по условию требуется преобразовать уже данный массив; для каждого элемента выполняется проверка остатка % (сначала на 15, потом на 3 и 5), а итог собирается в новый массив (чаще всего через map).