To compare arrays, loop through them and compare every value:

Comparing arrays:

// Warn if overriding existing method
if(Array.prototype.equals)
    console.warn("Overriding existing Array.prototype.equals. Possible causes: New API defines the method, there's a framework conflict or you've got double inclusions in your code.");
// attach the .equals method to Array's prototype to call it on any array
Array.prototype.equals = function (array) {
    // if the other array is a falsy value, return
    if (!array)
        return false;
    // if the argument is the same array, we can be sure the contents are same as well
    if(array === this)
        return true;
    // compare lengths - can save a lot of time 
    if (this.length != array.length)
        return false;

    for (var i = 0, l=this.length; i < l; i++) {
        // Check if we have nested arrays
        if (this[i] instanceof Array && array[i] instanceof Array) {
            // recurse into the nested arrays
            if (!this[i].equals(array[i]))
                return false;       
        }           
        else if (this[i] != array[i]) { 
            // Warning - two different object instances will never be equal: {x:20} != {x:20}
            return false;   
        }           
    }       
    return true;
}
// Hide method from for-in loops
Object.defineProperty(Array.prototype, "equals", {enumerable: false});

Usage:

[1, 2, [3, 4]].equals([1, 2, [3, 2]]) === false;
[1, "2,3"].equals([1, 2, 3]) === false;
[1, 2, [3, 4]].equals([1, 2, [3, 4]]) === true;
[1, 2, 1, 2].equals([1, 2, 1, 2]) === true;

You may say "But it is much faster to compare strings - no loops..." well, then you should note there ARE loops. First recursive loop that converts Array to string and second, that compares two strings. So this method is faster than use of string.

I believe that larger amounts of data should be always stored in arrays, not in objects. However if you use objects, they can be partially compared too.
Here's how:

Comparing objects:

I've stated above, that two object instances will never be equal, even if they contain same data at the moment:

({a:1, foo:"bar", numberOfTheBeast: 666}) == ({a:1, foo:"bar", numberOfTheBeast: 666})  //false

This has a reason, since there may be, for example private variables within objects.

However, if you just use object structure to contain data, comparing is still possible:

Object.prototype.equals = function(object2) {
    //For the first loop, we only check for types
    for (propName in this) {
        //Check for inherited methods and properties - like .equals itself
        //https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
        //Return false if the return value is different
        if (this.hasOwnProperty(propName) != object2.hasOwnProperty(propName)) {
            return false;
        }
        //Check instance type
        else if (typeof this[propName] != typeof object2[propName]) {
            //Different types => not equal
            return false;
        }
    }
    //Now a deeper check using other objects property names
    for(propName in object2) {
        //We must check instances anyway, there may be a property that only exists in object2
            //I wonder, if remembering the checked values from the first loop would be faster or not 
        if (this.hasOwnProperty(propName) != object2.hasOwnProperty(propName)) {
            return false;
        }
        else if (typeof this[propName] != typeof object2[propName]) {
            return false;
        }
        //If the property is inherited, do not check any more (it must be equa if both objects inherit it)
        if(!this.hasOwnProperty(propName))
          continue;
        
        //Now the detail check and recursion
        
        //This returns the script back to the array comparing
        /**REQUIRES Array.equals**/
        if (this[propName] instanceof Array && object2[propName] instanceof Array) {
                   // recurse into the nested arrays
           if (!this[propName].equals(object2[propName]))
                        return false;
        }
        else if (this[propName] instanceof Object && object2[propName] instanceof Object) {
                   // recurse into another objects
                   //console.log("Recursing to compare ", this[propName],"with",object2[propName], " both named \""+propName+"\"");
           if (!this[propName].equals(object2[propName]))
                        return false;
        }
        //Normal value comparison for strings and numbers
        else if(this[propName] != object2[propName]) {
           return false;
        }
    }
    //If everything passed, let's say YES
    return true;
}  

However, remember that this one is to serve in comparing JSON like data, not class instances and other stuff. If you want to compare more complicated objects, look at this answer and it's super long function.
To make this work with Array.equals you must edit the original function a little bit:

...
    // Check if we have nested arrays
    if (this[i] instanceof Array && array[i] instanceof Array) {
        // recurse into the nested arrays
        if (!this[i].equals(array[i]))
            return false;
    }
    /**REQUIRES OBJECT COMPARE**/
    else if (this[i] instanceof Object && array[i] instanceof Object) {
        // recurse into another objects
        //console.log("Recursing to compare ", this[propName],"with",object2[propName], " both named \""+propName+"\"");
        if (!this[i].equals(array[i]))
            return false;
        }
    else if (this[i] != array[i]) {
...

I made a little test tool for both of the functions.

Bonus: Nested arrays with indexOf and contains

Samy Bencherif has prepared useful functions for the case you're searching for a specific object in nested arrays, which are available here: https://jsfiddle.net/SamyBencherif/8352y6yw/

Answer from Tomáš Zato on Stack Overflow
Top answer
1 of 16
1084

To compare arrays, loop through them and compare every value:

Comparing arrays:

// Warn if overriding existing method
if(Array.prototype.equals)
    console.warn("Overriding existing Array.prototype.equals. Possible causes: New API defines the method, there's a framework conflict or you've got double inclusions in your code.");
// attach the .equals method to Array's prototype to call it on any array
Array.prototype.equals = function (array) {
    // if the other array is a falsy value, return
    if (!array)
        return false;
    // if the argument is the same array, we can be sure the contents are same as well
    if(array === this)
        return true;
    // compare lengths - can save a lot of time 
    if (this.length != array.length)
        return false;

    for (var i = 0, l=this.length; i < l; i++) {
        // Check if we have nested arrays
        if (this[i] instanceof Array && array[i] instanceof Array) {
            // recurse into the nested arrays
            if (!this[i].equals(array[i]))
                return false;       
        }           
        else if (this[i] != array[i]) { 
            // Warning - two different object instances will never be equal: {x:20} != {x:20}
            return false;   
        }           
    }       
    return true;
}
// Hide method from for-in loops
Object.defineProperty(Array.prototype, "equals", {enumerable: false});

Usage:

[1, 2, [3, 4]].equals([1, 2, [3, 2]]) === false;
[1, "2,3"].equals([1, 2, 3]) === false;
[1, 2, [3, 4]].equals([1, 2, [3, 4]]) === true;
[1, 2, 1, 2].equals([1, 2, 1, 2]) === true;

You may say "But it is much faster to compare strings - no loops..." well, then you should note there ARE loops. First recursive loop that converts Array to string and second, that compares two strings. So this method is faster than use of string.

I believe that larger amounts of data should be always stored in arrays, not in objects. However if you use objects, they can be partially compared too.
Here's how:

Comparing objects:

I've stated above, that two object instances will never be equal, even if they contain same data at the moment:

({a:1, foo:"bar", numberOfTheBeast: 666}) == ({a:1, foo:"bar", numberOfTheBeast: 666})  //false

This has a reason, since there may be, for example private variables within objects.

However, if you just use object structure to contain data, comparing is still possible:

Object.prototype.equals = function(object2) {
    //For the first loop, we only check for types
    for (propName in this) {
        //Check for inherited methods and properties - like .equals itself
        //https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
        //Return false if the return value is different
        if (this.hasOwnProperty(propName) != object2.hasOwnProperty(propName)) {
            return false;
        }
        //Check instance type
        else if (typeof this[propName] != typeof object2[propName]) {
            //Different types => not equal
            return false;
        }
    }
    //Now a deeper check using other objects property names
    for(propName in object2) {
        //We must check instances anyway, there may be a property that only exists in object2
            //I wonder, if remembering the checked values from the first loop would be faster or not 
        if (this.hasOwnProperty(propName) != object2.hasOwnProperty(propName)) {
            return false;
        }
        else if (typeof this[propName] != typeof object2[propName]) {
            return false;
        }
        //If the property is inherited, do not check any more (it must be equa if both objects inherit it)
        if(!this.hasOwnProperty(propName))
          continue;
        
        //Now the detail check and recursion
        
        //This returns the script back to the array comparing
        /**REQUIRES Array.equals**/
        if (this[propName] instanceof Array && object2[propName] instanceof Array) {
                   // recurse into the nested arrays
           if (!this[propName].equals(object2[propName]))
                        return false;
        }
        else if (this[propName] instanceof Object && object2[propName] instanceof Object) {
                   // recurse into another objects
                   //console.log("Recursing to compare ", this[propName],"with",object2[propName], " both named \""+propName+"\"");
           if (!this[propName].equals(object2[propName]))
                        return false;
        }
        //Normal value comparison for strings and numbers
        else if(this[propName] != object2[propName]) {
           return false;
        }
    }
    //If everything passed, let's say YES
    return true;
}  

However, remember that this one is to serve in comparing JSON like data, not class instances and other stuff. If you want to compare more complicated objects, look at this answer and it's super long function.
To make this work with Array.equals you must edit the original function a little bit:

...
    // Check if we have nested arrays
    if (this[i] instanceof Array && array[i] instanceof Array) {
        // recurse into the nested arrays
        if (!this[i].equals(array[i]))
            return false;
    }
    /**REQUIRES OBJECT COMPARE**/
    else if (this[i] instanceof Object && array[i] instanceof Object) {
        // recurse into another objects
        //console.log("Recursing to compare ", this[propName],"with",object2[propName], " both named \""+propName+"\"");
        if (!this[i].equals(array[i]))
            return false;
        }
    else if (this[i] != array[i]) {
...

I made a little test tool for both of the functions.

Bonus: Nested arrays with indexOf and contains

Samy Bencherif has prepared useful functions for the case you're searching for a specific object in nested arrays, which are available here: https://jsfiddle.net/SamyBencherif/8352y6yw/

2 of 16
655

While this only works for scalar arrays (shallow comparison, see note below), it is short code:

array1.length === array2.length && array1.every(function(value, index) { return value === array2[index]})

Same as above but in ECMAScript 6 / CoffeeScript / TypeScript with Arrow Functions:

array1.length === array2.length && array1.every((value, index) => value === array2[index])

(Note: 'scalar' here means values that can be compared directly using === . So: numbers, strings, objects by reference, functions by reference. See the MDN reference for more info about the comparison operators).

UPDATE

From what I read in the comments, sorting the array and comparing may give accurate result:

const array2Sorted = array2.slice().sort();
array1.length === array2.length && array1.slice().sort().every(function(value, index) {
    return value === array2Sorted[index];
});

Eg:

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

Then the above code would return true

🌐
GeeksforGeeks
geeksforgeeks.org › java › java-arrays-compare-method-with-examples
Java Arrays compare() Method with Examples - GeeksforGeeks
Example of Arrays.compare() method, where we compare two integer arrays with the same elements.
Published: April 14, 2026
People also ask

Can I compare data from different programming languages?
Yes. Since ArrayDiff works with JSON, you can compare a Python list against a JavaScript array or any other language's output. Just serialize both to JSON and paste them in.
🌐
arraydiff.com
arraydiff.com
Array Diff Online — Compare Arrays & JSON Free | ArrayDiff
How does ArrayDiff handle whitespace and formatting differences?
ArrayDiff compares the parsed data structure, not raw text. This means insignificant whitespace, trailing commas, and formatting differences are ignored. Only actual value changes are shown. For raw text comparison, use the Text Diff tool .
🌐
arraydiff.com
arraydiff.com
Array Diff Online — Compare Arrays & JSON Free | ArrayDiff
Does ArrayDiff work without an internet connection?
Once the page loads, all comparison logic runs locally in your browser with zero server calls. You can disconnect and continue comparing. This also means your data stays entirely on your device — see our privacy policy .
🌐
arraydiff.com
arraydiff.com
Array Diff Online — Compare Arrays & JSON Free | ArrayDiff
🌐
Reddit
reddit.com › r/learnjavascript › comparing two arrays
r/learnjavascript on Reddit: Comparing two arrays
November 25, 2024 -

I have two arrays. I would like to loop through one array and check if it is the same as the other. As soon as it runs into something that doesn't match, it needs to stop the loop and give an error. If it loops through and everything matches, it gives a success message.

How could I do this? What concepts do I need to know?

I can write loops, know how to access arrays. It's more checking if they're the same order, and also best approach stopping the check if they don't match.

Edit: This is helping so much. I've got what I need. Thank you so much everyone for the help. I'm using this to work on a project I'd started last year that I got hung up on. I have a hard time asking for help because I like learning concepts and kind of get obsessed over details. Kinda wish I could relearn how to learn 😆

🌐
DataCamp
datacamp.com › doc › java › compare
Java Array compare()
While Java does not have a built-in compare() method specifically for arrays, it provides utility methods in the java.util.Arrays class to facilitate array comparison.
🌐
ArrayDiff
arraydiff.com
Array Diff Online — Compare Arrays & JSON Free | ArrayDiff
Supports arrays with strings, numbers, objects, and nested arrays from Python, JavaScript, PHP, Ruby, Go, and more. Click "Compare Arrays" to see the differences highlighted in real-time.
Find elsewhere
🌐
freeCodeCamp
freecodecamp.org › news › how-to-compare-arrays-in-javascript
Comparing Arrays in JavaScript – How to Compare 2 Arrays in JS
November 7, 2024 - A common and quite straightforward approach you can use to compare two arrays is first to convert these arrays to string form.
🌐
Baeldung
baeldung.com › home › java › java array › comparing arrays in java
Comparing Arrays in Java | Baeldung
January 8, 2024 - With this, we’ve proven that both arrays have eight elements and that the length property returns the correct number of elements for each array. So far we only compared arrays based on their object identities. On the other hand, to check if two arrays are equal in terms of their contents, Java provides the Arrays.equals static method.
🌐
Mastering JS
masteringjs.io › tutorials › fundamentals › compare-arrays
Compare Arrays in JavaScript - Mastering JS
With that in mind, here's 3 definitions of equality for arrays and how to check them. One approach for comparing a and b is checking if each value of a is strictly equal to the corresponding value of b.
🌐
PHP
php.net › manual › en › function.array-diff.php
PHP: array_diff - Manual
Compares array against one or more other arrays and returns the values in array that are not present in any of the other arrays.
🌐
Medium
medium.com › @AlexanderObregon › javas-arrays-compare-method-explained-7989daf18608
Java’s Arrays.compare() Method Explained | Medium
February 6, 2025 - The compare() method in the java.util.Arrays class provides a way to compare two arrays lexicographically. This means it determines which array is greater, smaller, or if they are equal by checking the elements in order.
🌐
GeeksforGeeks
geeksforgeeks.org › java › compare-two-arrays-java
Compare Two Arrays in Java - GeeksforGeeks
July 23, 2025 - So, when we compare arr1 and arr2, two reference variables are compared, therefore, we get the output as "Not Same". ... Java provides a direct method Arrays.equals() to compare two arrays.
🌐
Scaler
scaler.com › home › topics › compare two arrays in javascript
Compare Two Arrays in JavaScript
January 10, 2024 - This means that instead of comparing the values contained in the two arrays, Javascript checks whether they point to the same reference, which is usually not the case even if the two arrays contain the same elements. This means when comparing two arrays in JavaScript, using either the loose or tight equality operators ( that is == or ===), usually it will result in false.
🌐
YouTube
youtube.com › watch
Array Compare | How to compare arrays | Javascript | One Minute Javascript | 1 Min JS | Quick JS - YouTube
Array Compare | How to compare arrays | Javascript | One Minute Javascript | 1 Min JS | Quick JSLearn how to compare two arrays in JavaScript with ease! In t...
Published: June 1, 2023
🌐
GeeksforGeeks
geeksforgeeks.org › javascript › how-to-compare-two-arrays-in-javascript
JavaScript- Arrays are Equal or Not - GeeksforGeeks
July 11, 2025 - This approach leverages the fact that two arrays are equal if they contain the same elements in the same order. By sorting both arrays and then comparing them element by element, we can determine if they are equal.
🌐
MetaCPAN
metacpan.org › pod › Array::Compare
Array::Compare - Perl extension for comparing arrays. - metacpan.org
In addition to the simple comparison described above (which returns true if the arrays are the same and false if they're different) there is also a full comparison which returns a list containing the indexes of elements which differ between ...
🌐
30 Seconds of Code
30secondsofcode.org › home › javascript › array › javascript array comparison
How do I compare two arrays in JavaScript? - 30 seconds of code
September 27, 2021 - A common solution that many people suggest is to use JSON.stringify(). This allows us to serialize each array and then compare the two serialized strings.