There is often a confusion between slice() and splice() JavaScript array methods. It is a commonly asked question in Javascript interview for freshers.
Let's discuss how they work with examples and what's the core difference between them.
Slice():
- Takes two optional parameters
start index
andend index
. - Doesn't change the original array instead returns the copied part of array from {start index} to {end index - 1} in a new array, like the example below.
let fruits = ['apple', 'mango', 'banana', 'orange'];
fruits.slice(1,3);
['mango', 'banana']
// it returns the elements in index 1(start index) and 2(end index - 1)
fruits: ['apple', 'mango', 'banana', 'orange']
// no change in original arary
But it only does shallow copying.[Example below]
let oldArray = [
{id: 1, name: 'js'},
{id: 2, name: 'react'},
{id: 3, name: 'angular'},
{id: 4, name: 'vue'}
];
let newArray = oldArray.slice(1,3);
// output: [ {id: 2, name: 'react'}, {id: 3, name: 'angular'}]
newArray[0].name = 'jquery';
console.log('new array id: 2 value', newArray[0].name); //jquery
console.log('old array id: 2 value', oldArray[1].name); // jquery
if you change the object value (reference type) in newArray it affects the value in oldArray i.e. Shallow copying.
Great Usecase: if you want a shallow copy of an array: you can use slice() method with no parameters and it will return the new copied array.
let originalArr = [1, 2, 3, 4];
let copiedArr = originalArr.slice(); // new copied [1, 2, 3, 4]
Splice():
- Takes two optional parameters
start index
andlength of elements to be deleted
. - returns part of array from {start index} to the {start index + length of elements to be deleted} in a new array.
- But It changes the original array i.e. remove the elements from original array. [Example below]
let oldArray = [
{id: 1, name: 'js'},
{id: 2, name: 'react'},
{id: 3, name: 'angular'},
{id: 4, name: 'vue'}
];
let newArray = oldArray.splice(0, 2);
// newArray: [
{id: 1, name: 'js'},
{id: 2, name: 'react'}
]
// oldArray: [
{id: 3, name: 'angular'},
{id: 4, name: 'vue'}
]
-
Usecase 1: It can also be used to replace items in the original array.
- splice() can take three parameters start index, length of items to be deleted and items to be replaced.[Example below]
let fruits = ['apple', 'mango', 'banana', 'orange'];
fruits.splice(0, 1, 'grape'); // ['apple']
// original array:
['grape', 'mango', 'banana', 'orange'];
// grape has replaced the apple in the original array.
- Usecase 2: You can add an item in particular index.[Example below]
let fruits = ['apple', 'mango', 'banana', 'orange'];
fruits.splice(2, 0, 'grape'); // []
// original array:
['apple', 'mango', 'grape', 'banana', 'orange'];
// grape has been added to the index = 2 in the original array.
- Usecase I came across several times: deleting an element by finding an index.
let fruits = [
{id: 1, value: 'apple'},
{id: 2, value: 'mango'},
{id: 3, value: 'orange'}
];
let index = fruits.findIndex(el => el.id === 2) // 1
fruits.splice(index, 1); // [{id: 2, value: 'mango'}]
// original array:
let fruits = [
{id: 1, value: 'apple'},
{id: 3, value: 'orange'}
];
Conclusion:
Both these methods can be used for deleting elements in an array.
The core differences are below in table.
slice | splice |
---|---|
return the copied version of deleted elements in new array | return the deleted elements in new array |
doesn't change the original array | changes the original array, deleted elements are removed from the original array |
no parameters, it will return the shallow copy of original array | no parameters, it will return empty array |
Read more on MDN: splice, slice
Thanks for reading!
Let's connect on twitter My Profile
Top comments (4)
In
splice()
usecase 2fruits
should be['apple', 'mango', 'grape', 'banana', 'orange']
after splicing, shouldn't it?You are right. Silly mistake, didn't maintain the first item 'apple' there.
Thanks for correction.
My pleasure! ☺
Thanks for the nice article. It provides a good overview.
Thanks for the reading and a cool suggestion :)
In the next one I will be covering array methods, chaining and some usecases. However, this article I solely dedicated to slice() and splice().