Применение операторов rest и spread в JavaScript

Функция, находящая сумму чисел

Давайте напишем функцию, которая будет принимать параметрами произвольное количество чисел и возвращать их сумму.

Вот примеры работы нашей функции:

console.log( func(1, 2, 3) ); // выведет 6 console.log( func(1, 2, 3, 4) ); // выведет 10 console.log( func(1, 2, 3, 4, 5) ); // выведет 15

Для начала давайте сделаем так, чтобы все переданные параметрами числа попадали в массив:

function func(...nums) { console.log(nums); } func(1, 2, 3); // выведет [1, 2, 3]

А теперь запустим цикл по переданному массиву и найдем сумму переданных чисел:

function func(...nums) { let sum = 0; for (let num of nums) { sum += num; } return sum; } let result = func(1, 2, 3); console.log(result); // выведет 6

Напишите функцию, которая будет принимать параметрами произвольное количество чисел и возвращать их среднее арифметическое (сумма делить на количество).

Функция, сливающая массивы в двухмерный

Давайте сделаем функцию unite, которая параметрами будет принимать произвольное количество массивов и сливать их в один двухмерный.

Вот пример работы описанной функции:

let result = unite([1, 2, 3], [4, 5, 6], [7, 8, 9]); console.log(result); // выведет [ [1, 2, 3,] [4, 5, 6], [7, 8, 9] ]

Не смотря на достаточную сложность функции, ее реализация с помощью оператора rest будет очень лаконичной:

function unite(...arrs) { return arrs; }

Функция, сливающая массивы в один

Давайте теперь реализуем функцию merge, параметрами принимающую произвольное количество массивов и сливающую их элементы в один массив.

Вот пример работы нашей функции:

let result = merge([1, 2, 3], [4, 5, 6], [7, 8, 9]); console.log(result); // выведет [1, 2, 3, 4, 5, 6, 7, 8, 9]

Приступим к реализации. Давайте для начала получим переданные массивы в виде одного двухмерного:

merge([1, 2, 3], [4, 5, 6], [7, 8, 9]); function merge(...arrs){ console.log(arrs); // выведет [ [1, 2, 3,] [4, 5, 6], [7, 8, 9] ] }

Давайте теперь сольем этот двухмерный массив в одномерный. Используем для этого метод concat и оператор spread:

let arrs = [ [1, 2, 3,] [4, 5, 6], [7, 8, 9] ]; let result = [].concat(...arrs); console.log(result); // выведет [1, 2, 3, 4, 5, 6, 7, 8, 9]

Давайте добавим этот код в нашу функцию merge:

function merge(...arrs) { return [].concat(...arrs); } let result = merge([1, 2, 3], [4, 5, 6], [7, 8, 9]); console.log(result); // выведет [1, 2, 3, 4, 5, 6, 7, 8, 9]

Как вы видите, эта функция также получилась очень лаконичной.