How to Compare Two Arrays in JavaScript

  1. Using Array.prototype.equals
  2. Using the JSON.stringify Method
  3. Using the Array.prototype.every Method
  4. Using a Custom Function with Sorting
  5. Conclusion
  6. FAQ
How to Compare Two Arrays in JavaScript

When working with JavaScript, comparing two arrays can be a common yet tricky task. Whether you’re checking for equality, finding differences, or determining if one array is a subset of another, understanding how to effectively compare arrays is essential for any developer. This tutorial introduces a few methods to compare two arrays in JavaScript, providing you with practical code examples and detailed explanations to enhance your coding skills.

In this guide, we’ll explore multiple techniques to compare arrays, including using built-in methods and custom functions. By the end of this article, you will have a solid grasp of how to approach array comparisons, making your JavaScript coding more efficient and effective. So, let’s dive in!

Using Array.prototype.equals

JavaScript provides us the capability to add new properties and methods to the existing classes. We can use Array.prototype to add our custom method equals into the Array object.

In the below example, we will first check the length of both the arrays and then comparing each item. We are also checking if a1 and a2 are Array instances because if they are not, they are not identical. At last, we use the method to compare the first array with the second one by a1.equals(a2).

Example:

var a1 = [1, 2, 3];
var a2 = [1, 2, 3];
var a3 = [1, 2, 3, 4];

Array.prototype.equals = function(getArray) {
  if (this.length != getArray.length) return false;

  for (var i = 0; i < getArray.length; i++) {
    if (this[i] instanceof Array && getArray[i] instanceof Array) {
      if (!this[i].equals(getArray[i])) return false;
    } else if (this[i] != getArray[i]) {
      return false;
    }
  }
  return true;
};

console.log('Comparing a1 and a2', a1.equals(a2));
console.log('Comparing a1 and a3', a1.equals(a3));

Output:

Comparing a1 and a2 true
Comparing a1 and a3 false

Using the JSON.stringify Method

One of the simplest methods to compare two arrays in JavaScript is by converting them to strings using JSON.stringify(). This method serializes the arrays into JSON format, allowing for a straightforward comparison.

function arraysEqual(arr1, arr2) {
    return JSON.stringify(arr1) === JSON.stringify(arr2);
}

const array1 = [1, 2, 3];
const array2 = [1, 2, 3];
const array3 = [3, 2, 1];

console.log(arraysEqual(array1, array2));
console.log(arraysEqual(array1, array3));

Output:

true
false

The arraysEqual function takes two arrays as arguments. It uses JSON.stringify() to convert both arrays into JSON strings. If the resulting strings are identical, the function returns true, indicating that the arrays are equal. This method is efficient for small arrays but may not be optimal for larger datasets due to performance concerns. Additionally, it doesn’t handle nested arrays or objects well, so be cautious when using this approach.

Using the Array.prototype.every Method

Another effective way to compare two arrays is by utilizing the Array.prototype.every() method. This method tests whether all elements in the first array pass a specific test implemented by a provided function.

function arraysEqual(arr1, arr2) {
    if (arr1.length !== arr2.length) return false;

    return arr1.every((element, index) => element === arr2[index]);
}

const array1 = [1, 2, 3];
const array2 = [1, 2, 3];
const array3 = [1, 2, 4];

console.log(arraysEqual(array1, array2));
console.log(arraysEqual(array1, array3));

Output:

true
false

In this method, the arraysEqual function first checks if the lengths of the two arrays are different. If they are, it immediately returns false. If the lengths are the same, it uses every() to iterate through each element of the first array, comparing it to the corresponding element in the second array. If all elements match, the function returns true. This approach is efficient and works well for arrays of the same length, but it also does not account for nested structures.

Using a Custom Function with Sorting

If you need to compare arrays regardless of their order, sorting them before comparison is a good strategy. This method involves sorting both arrays and then comparing them element by element.

function arraysEqual(arr1, arr2) {
    if (arr1.length !== arr2.length) return false;

    const sortedArr1 = arr1.slice().sort();
    const sortedArr2 = arr2.slice().sort();

    return sortedArr1.every((element, index) => element === sortedArr2[index]);
}

const array1 = [3, 2, 1];
const array2 = [1, 2, 3];
const array3 = [1, 2, 4];

console.log(arraysEqual(array1, array2));
console.log(arraysEqual(array1, array3));

Output:

true
false

In this approach, the arraysEqual function first checks if the lengths of the arrays are equal. If they’re not, it returns false. If the lengths match, it sorts both arrays using the sort() method. The slice() method is used to create shallow copies of the arrays to avoid modifying the original arrays. Finally, it compares the sorted arrays using every(). This method is beneficial when the order of elements doesn’t matter, but sorting can introduce performance overhead for large arrays.

Conclusion

Comparing two arrays in JavaScript can be accomplished using various methods, each with its own advantages and limitations. Whether you choose to use JSON.stringify(), Array.prototype.every(), or a custom sorting function, understanding these techniques will enhance your coding toolkit. By mastering these array comparison methods, you’ll be better equipped to handle data manipulation and validation in your JavaScript projects.

FAQ

  1. What is the best method to compare arrays in JavaScript?
    The best method depends on your specific needs. For simple comparisons, JSON.stringify() is easy to use, while Array.prototype.every() is more efficient for checking equality without modifying the arrays.

  2. Does the order of elements matter when comparing arrays?
    Yes, the order matters in most comparison methods unless you sort the arrays before comparison.

  3. Can I compare nested arrays using these methods?
    The methods discussed may not work correctly for nested arrays. For such cases, consider using a recursive function to compare each level of the array.

  4. Are there performance concerns with these methods?
    Yes, methods like JSON.stringify() and sorting can be less efficient for large arrays. Always consider the size of your data when choosing a method.

  5. Can I compare arrays with different data types?
    The methods will work as long as the data types are consistent within each array. However, mixed types may lead to unexpected results.

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
Author: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

Related Article - JavaScript Array