Remove Items from Arrays by Value in JavaScript

Introduction

Welcome to this Byte where we'll explore different methods to remove an item from an array by value in JavaScript. This is a common operation you might need to perform while coding, and JavaScript provides several ways to accomplish it. We'll focus on two methods in particular: the filter() method and the splice() method.

Arrays in JavaScript

Before we dive into the methods of removing items, let's quickly review what arrays are in JavaScript. An array is a special variable that can hold more than one value at a time. Each value (also called an element) in an array has a numeric position, known as its index, which starts from 0.

let fruits = ['apple', 'banana', 'cherry'];
console.log(fruits[0]); // Outputs: apple

Using the Filter Method

One of the most common ways to remove an item from an array by value is by using the filter() method. The filter() method creates a new array with all elements that pass the test implemented by the provided function.

Here's an example where we remove the value 'banana' from the array:

let fruits = ['apple', 'banana', 'cherry'];
let filteredFruits = fruits.filter(value => value !== 'banana');
console.log(filteredFruits); // Outputs: ['apple', 'cherry']

In the example above, we're creating a new array, filteredFruits, that contains all elements from the fruits array except 'banana'.

Note: The filter() method does not change the original array. It returns a new array that satisfies the condition provided in the callback function.

Using the Splice Method

Another way to remove an item from an array by value is by using the splice() method. Unlike filter(), splice() modifies the original array by removing or replacing existing elements.

First, we need to find the index of the value we want to remove using the indexOf() method. Once we have the index, we can use splice() to remove the element.

Here's an example where we remove 'banana' from the array:

let fruits = ['apple', 'banana', 'cherry'];
let index = fruits.indexOf('banana');
if (index !== -1) {
  fruits.splice(index, 1);
}
console.log(fruits); // Outputs: ['apple', 'cherry']

Note: The splice() method does change the original array and thus can be destructive. Make sure you don't need the original array intact when using this method.

Using the Lodash Library

Lodash is a popular JavaScript utility library that provides many helpful methods for manipulation and combination of arrays, objects, and other data types. One of these methods is _.pull(), which mutates the array by removing all instances of the specified values.

const _ = require('lodash');

let array = [1, 2, 3, 2, 4, 2, 5];
_.pull(array, 2);

console.log(array);

This will output:

[1, 3, 4, 5]
Get free courses, guided projects, and more

No spam ever. Unsubscribe anytime. Read our Privacy Policy.

The _.pull() method mutates the original array. If you want to keep the original array unchanged, you can use _.without(), which returns a new array.

Removal of Non-Primitive Values

Removing non-primitive values like objects or arrays from an array is a bit more complex because two objects or arrays are not strictly equal, even if they have the same properties or elements.

To handle cases like this, you can use the filter() method combined with JSON.stringify() to remove non-primitive values:

let array = [{a: 1}, {b: 2}, {a: 1}, {c: 3}];
let valueToRemove = {a: 1};

array = array.filter(item => JSON.stringify(item) !== JSON.stringify(valueToRemove));

console.log(array);

This will output:

[ { b: 2 }, { c: 3 } ]

This method is a bit of a hack, and for this reason I would not recommend it. A better approach might be to first check if the object has the given property you're looking for, and then the value:

let array = [{a: 1}, {b: 2}, {a: 1}, {c: 3}];
let valueToRemove = {a: 1};

array = array.filter(item => item.hasOwnProperty('a') && item.a === valueToRemove.a);

console.log(array);
[ { b: 2 }, { c: 3 } ]

Removing Multiple Occurrences

If you want to remove all occurrences of a particular value from an array, you can use the filter() method:

let array = [1, 2, 3, 2, 4, 2, 5];
let valueToRemove = 2;

array = array.filter(item => item !== valueToRemove);

console.log(array);

This will output:

[1, 3, 4, 5]

This code will create a new array that includes all items from the original array except for the ones equal to valueToRemove.

Conclusion

In this Byte, we've explored different ways to remove items from an array by value in JavaScript. We've seen how to use built-in JavaScript methods like filter() and splice(), as well as a method from the Lodash library. We've also discussed how to handle non-primitive values and multiple occurrences. These methods can be combined and modified to fit your specific needs, providing more flexibility when working with arrays in JavaScript.

Last Updated: August 29th, 2023
Was this helpful?

© 2013-2024 Stack Abuse. All rights reserved.

AboutDisclosurePrivacyTerms