Font Awesome Free 5.13.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
Skip to main content

Spread syntax, rest parameters and destructuring (JavaScript)

An overview of JavaScript spread syntax, rest parameters and destructuring

Spread syntax

  • Syntax: ...
  • Allows expanding an array or string into individual elements/characters
  • Allows expanding an object into key-value pairs of properties

Use case: expanding array into function arguments (before spread syntax, you would need to use apply for this)

const test = [1, 7, 3];
const max = Math.max(...test); // 7

Use case: stitching together arrays

const a = [1, 7, 3];
const b = [5, ...a]; // [5, 1, 7, 3]
const c = [1];
const d = [2, 3];
const e = [...c, ...d]; // [1, 2, 3]

Use case: shallow copy of array

const original = [1, 2, 3];
const shallowCopy = [...original]

Use case: transforming a Set (or other iterable) into an array (easy way of filtering array by distinct values)

const original = ["a", "b", "c", "a"];
const distinct = [...new Set(original)]; // ["a", "b", "c"];

Use case: combining objects (alternative to Object.assign)

Note: in case of conflicts, newest overwrites oldest

const a = { prop1: "a", prop2: true };
const b = { prop3: 3, ...a }; // { prop3: 3, prop1: "a", prop2: true }
const a = { prop1: "a", prop2: true };
const b = { prop2: false, prop3: 3 };
const c = { ...a, ...b }; // { prop1: "a", prop2: false, prop3: 3 }
const a = { prop2: true };
const b = { prop2: undefined };
const c = { ...a, ...b }; // {} (undefined overwrites true)

Rest parameters

  • Syntax: ...
  • Allows to represent any number of arguments as an array

Example:

function test(...input) {
return input;
}

test(1, 2, 3); // [1, 2, 3];

Destructuring

Allows unpacking array elements or object properties into separate variables

Array destructuring

Use case: unpacking array elements

const x = [1, 2, 3, 4, 5];
const [a, b] = x; // a = 1, b = 1
const [c, ...rest] = x; // c = 1, rest = [2, 3, 4, 5]
const [, d] = x; // d = 2

Use case: swapping values of variables

[a, b] = [b, a];

Working with default values:

const [a = 1, b = 2] = [3]; // a = 3, b = 2

Object destructuring

Use case: unpacking object properties

const a = { prop1: "a", prop2: false, prop3: 3 };
const { prop1 } = a; // prop1 = "a"
const { prop2, ...b } = a; // prop2 = false, b = { prop1: "a", prop3: 3 }
const a = { prop1: "a" };
const { prop1: newName } = a; // newName = "a"

Working with default values

const a = { prop1: "a" };
const { prop1 = "b", prop2 = false } = a; // prop1 = "a", prop2 = false

Combining everything, plus default parameters

function test({ name: firstName = "John", lastName = "Doe" } = {}) {
console.log(firstName + " " + lastName);
}

test(); // John Doe
test({}); // John Doe
test({ lastName: "Bovi" }); // John Bovi
test({ name: "Cookie" }); // Cookie Doe
test({ lastName: undefined }); // John Doe
test({ lastName: null }); // John null

Resources