Recursion with ES6 Spread Syntax and Destructuring.

I’ve been working with ES6 for over a year now and can easily say the spread operator and destructuring are by far my most frequently used features.

Spread Operator

Allows the expansion of items inside an object or array - or if you’re working with functions,arguments. This is especially useful when you want to overwrite the value of a key in an object while still preserving the object’s original contents.


Allows the “extraction” of particular values from an iterable list. For arrays, this extraction is index-based, while attribute values from objects are extracted using the “key” they belong to.

Recursion using both

I coded a small recursive function that leverages both these features. It takes in a list of numbers and multiplier value, then returns the transformed list where each original value is multiplied by the mutliplier value argument.

function multiply(arr, multiplier, prev = []) {
    // Extract the first element from the number list.
    const [number,] = arr;
    // Base-case: if there are no numbers to extract, then return.
    if (!number) return [...prev, ...arr];
    // Otherwise, we pass the remaining of the array to multiply again, the multiplier, and the accumulated transformed list.
    return multiply(rest,  multiplier, [...prev, number*multiplier]);
Written on November 29, 2017