toggle()
toggle<
T>(array,element):T[]
Toggles the presence of an element in an array.
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โ
| Operation | Purpose | Result |
|---|---|---|
toggle(arr, x) | Add or remove in one call | Toggles presence |
arr.filter(i => i !== x) | Remove only | Always removes |
[...arr, x] | Add only | Always 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)