Let say I have 2 arrays
firstArray = [1, 2, 3, 4, 5];
secondArray = [5, 4, 3, 2, 1];
I want to know if they contain the same elements, whi
Well there is an Array.sort() method in JavaScript, and for comparing the (sorted) arrays, I think it's best to check out this question, as it is has a really good answer.
Especially note that comparing arrays as strings (e.g. by JSON.stringify
) is a very bad idea, as values like "2,3"
might break such a check.
Not in Vanila Javascript but in Angular there is option to match two objects.
angular.equals([1,2,3],[1,2,3])
Determines if two objects or two values are equivalent. Supports value types, regular expressions, arrays and objects.
See if this could help you.
alert("Match result of [1,2,3] & [1,2,3] is "+angular.equals([1,2,3],[1,2,3]));
alert("Match result of [1,4,3] & [1,2,3] is "+angular.equals([1,4,3],[1,2,3]));
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
Click on Run Code snippet. If this solves your need please mark it as as Answer :)
In case order is not important and array is of number type.
var a1 = [1, 2, 3];
var a2 = [2, 1, 3];
//In case order is not important and array is of number type.
alert(eval(JSON.stringify(a1).replace(/,/g, "+").replace(/\[/g, "").replace(/\]/g, "")) === eval(JSON.stringify(a2).replace(/,/g, "+").replace(/\[/g, "").replace(/\]/g, "")));
Here's a working implementation using Vanilla JS:
function haveMatchingElements(firstArray, secondArray) {
var stringsInFirstArray = parse(firstArray, 'string'),
stringsInSecondArray = parse(secondArray, 'string'),
numbersInFirstArray = parse(firstArray, 'number'),
numbersInSecondArray = parse(secondArray, 'number'),
stringResults = compare(stringsInFirstArray, stringsInSecondArray),
numberResults = compare(numbersInFirstArray, numbersInSecondArray);
if (stringResults && numberResults) {
return true;
} return false;
function parse(array, type) {
var arr = [];
arr = array.sort().filter(function(index) {
if (typeof index == type)
return index;
});
return arr;
}
function compare(firstArray, secondArray) {
if (firstArray.length !== secondArray.length)
return false;
for (var i = firstArray.length; i--;) {
if (firstArray[i] !== secondArray[i])
return false;
}
return true;
}
}
This parses strings an numbers into different arrays and checks them separately. That will correct the issue of 1
and "1"
matching as true
due to the implicit type conversion caused by the sort
function.
The implementation is simple:
var arr1 = ['1', 1];
var arr2 = [1, '1'];
var results = haveMatchingElements(arr1, arr2);
console.log(results); // true
Using jQuery
You can compare the two arrays using jQuery
:
// example arrays:
var firstArray = [ 1, 2, 3, 4, 5 ];
var secondArray = [ 5, 4, 3, 2, 1 ];
// compare arrays:
var isSameSet = function( arr1, arr2 ) {
return $( arr1 ).not( arr2 ).length === 0 && $( arr2 ).not( arr1 ).length === 0;
}
// get comparison result as boolean:
var result = isSameSet( firstArray, secondArray );
Here is a JsFiddle Demo
See this question helpful answer