Add to JavaScript Array: Practical Techniques
Master practical patterns to add to JavaScript arrays, including push, unshift, spread, and immutable approaches with real-world examples, performance notes, and best practices for both mutating and non-mutating scenarios.

Definition: Adding to a JavaScript array means inserting new elements into an existing array. You can mutate the array with push or unshift, or produce a new array using spread syntax or concat. According to JavaScripting, the most common pattern is arr.push(value) for appending, while immutable styles use [...arr, value]. The JavaScripting team found that choosing mutating versus immutable strategies depends on state management and performance needs.
Add elements with push and unshift: mutating arrays
When you need to grow an existing array by appending or prepending, mutating methods are the simplest approach. The push method appends to the end, while unshift adds to the front. Both modify the original array in place, which is important to consider for stateful code, event handlers, or React-like state patterns. We'll start with practical examples and discuss when mutating is advantageous and when it might cause bugs.
let nums = [1, 2, 3];
// append at the end
nums.push(4);
console.log(nums); // [1, 2, 3, 4]
// prepend at the beginning
nums.unshift(0);
console.log(nums); // [0, 1, 2, 3, 4]// push multiple values at once
let chars = ['a'];
chars.push('b', 'c', 'd');
console.log(chars); // ['a','b','c','d']push returns the new length of the array, not the array itself, which can influence how you chain calls.
-1.0
Steps
Estimated time: 15-25 minutes
- 1
Identify insertion strategy
Decide whether you should mutate the original array (e.g., for in-place updates or performance) or create a new array (immutability for safer state management).
Tip: Mutability makes state updates cheaper; immutability reduces bugs in complex UIs. - 2
Choose the insertion method
Choose push or unshift for simple appends/prepends, or splice for arbitrary positions. For immutable patterns, plan to spread or concat.
Tip: Spread syntax is concise and readable. - 3
Write the code for end insertion
Implement arr.push(value) or arr.push(...values) and ensure you capture the returned length if needed.
Tip: Remember: push returns length, not the array. - 4
Try front insertion immutably
If you need immutability, establish newArr = [...arr, value] or newArr = arr.concat(value).
Tip: Spread creates a new array reference, useful for state systems. - 5
Test with diverse inputs
Test with empty arrays, large arrays, and arrays of objects to verify behavior across cases.
Tip: Edge cases often reveal subtle bugs. - 6
Document your choice
Comment why mutating vs immutable was chosen for a given code path to aid future maintenance.
Tip: Good inline documents save debugging time later.
Prerequisites
Required
- Required
Keyboard Shortcuts
| Action | Shortcut |
|---|---|
| CopyCopy selected text in editors or terminals | Ctrl+C |
| PastePaste into editors or consoles | Ctrl+V |
| UndoUndo last change in code editor | Ctrl+Z |
| RedoRedo last undone change | Ctrl+Y |
| FindSearch within code or docs | Ctrl+F |
| ReplaceSearch/replace text in editor | Ctrl+H |
Questions & Answers
What is the difference between push and unshift?
Push adds elements to the end of the array, while unshift adds to the beginning. Both mutate the original array and return the new length. Use them when you want to modify in place and you don’t need an immutable snapshot.
Push adds to the end, unshift to the front, and both change the original array.
When should I use immutable array updates?
Immutable updates return a new array and keep the original unchanged. This is beneficial in UI frameworks where change detection relies on reference equality, such as React. Use spread or concat to create the new array.
Prefer immutable updates in UI code to help with predictable rendering.
Can I insert at a specific index without mutating the array?
Yes. Use the splice method in a mutable way or construct a new array using slices and spread if you need immutability. Splice can insert, replace, or delete items in place.
splice changes the array in place, but you can build a new array instead if you need immutability.
Is there a performance difference between push and spread?
Push is typically faster because it mutates in place and avoids creating a new array. Spread creates a new array, which can incur additional allocations and copying for large arrays.
Mutating with push is usually faster; spreads create a new array.
How do I append multiple values immutably?
Use newArr = [...arr, val1, val2, val3] or newArr = arr.concat(val1, val2, val3). These approaches return a new array without altering the original.
Add several elements by creating a new array with spread or concat.
Can I remove elements after adding?
Yes. Use splice to remove elements by index, or filter to produce a new array without certain items. Remember that splice mutates, while filter returns a new array.
You can remove items with splice, or make a new array with filter.
What to Remember
- Append with push for speed
- Use spread for immutable additions
- Use splice for index-based inserts
- Prefer immutable patterns in UI state
- Test edge cases with empty and large arrays