Skip to main content

toggle()

toggle<T>(array, element): T[]

Toggles the presence of an element in an array.

note

Uses strict equality (===). Only the first occurrence is removed.


Type Parametersโ€‹

T: Tโ€‹

The type of elements in the array.


Parametersโ€‹

array: readonly T[]โ€‹

The source array.

element: Tโ€‹

The element to toggle.


Returns: T[]โ€‹

A new array with the element added or removed.


Sinceโ€‹

2.0.0


Performanceโ€‹

O(n) time & space, uses indexOf and filter/spread operations.


Also known asโ€‹

symmetricDifference (Remeda, Ramda) ยท toggle (Radashi) ยท xor (Lodash) ยท โŒ (es-toolkit, Effect, Modern Dash, Antfu)


Exampleโ€‹

toggle([1, 2, 3], 2);
// => [1, 3]

toggle([1, 2, 3], 4);
// => [1, 2, 3, 4]

How it works?โ€‹

Toggle adds an element if absent, or removes it if present โ€” a single operation for both actions. Uses reference equality (===) to find the element.

Toggle vs Filter vs Spreadโ€‹

OperationPurposeResult
toggle(arr, x)Add or remove in one callToggles presence
arr.filter(i => i !== x)Remove onlyAlways removes
[...arr, x]Add onlyAlways appends (duplicates possible)

Use Casesโ€‹

Manage selected items in a multi-select UI ๐Ÿ“Œโ€‹

Toggle selection state for checkboxes, tags, or list items. Perfect for filter panels, shopping carts, or bulk action selectors.

let selectedFilters = ["electronics", "in-stock"];

selectedFilters = toggle(selectedFilters, "on-sale");
// => ["electronics", "in-stock", "on-sale"] (added)

selectedFilters = toggle(selectedFilters, "electronics");
// => ["in-stock", "on-sale"] (removed)

Handle favorites or bookmarks ๐Ÿ“Œโ€‹

Add or remove items from saved lists with a single action. Ideal for wishlists, reading lists, or starred content.

let bookmarkedIds = [101, 205, 342];

bookmarkedIds = toggle(bookmarkedIds, 205);
// => [101, 342] (removed)

bookmarkedIds = toggle(bookmarkedIds, 789);
// => [101, 342, 789] (added)

Manage user permissions dynamicallyโ€‹

Grant or revoke access rights with a single action. Useful for admin panels, role management, or feature flags.

let permissions = ["read", "write"];

permissions = toggle(permissions, "delete");
// => ["read", "write", "delete"] (granted)

permissions = toggle(permissions, "write");
// => ["read", "delete"] (revoked)