Compare Two Arrays in Python Using the numpy. array_equiv() Method. The numpy. array_equiv(a1, a2) method takes array a1 and a2 as input and returns True if both arrays' shape and elements are the same; otherwise, returns False .
Use the inbuilt ES6 function some() to iterate through each and every element of first array and to test the array. Use the inbuilt function includes() with second array to check if element exist in the first array or not. If element exist then return true else return false.
You should leverage a hashmap/hashset for a substantially faster O(n) solution: void findDupes(int[] a, int[] b) { HashSet<Integer> map = new HashSet<Integer>(); for (int i : a) map. add(i); for (int i : b) { if (map. contains(i)) // found duplicate! } }
If your array items are not objects- if they are numbers or strings, for example, you can compare their joined strings to see if they have the same members in any order-
var array1= [10, 6, 19, 16, 14, 15, 2, 9, 5, 3, 4, 13, 8, 7, 1, 12, 18, 11, 20, 17];
var array2= [12, 18, 20, 11, 19, 14, 6, 7, 8, 16, 9, 3, 1, 13, 5, 4, 15, 10, 2, 17];
if(array1.sort().join(',')=== array2.sort().join(',')){
alert('same members');
}
else alert('not a match');
If you want to check only if two arrays have same values (regardless the number of occurrences and order of each value) you could do this by using lodash:
_.isEmpty(_.xor(array1, array2))
Short, simple and pretty!
Sort the arrays and compare their values one by one.
function arrayCompare(_arr1, _arr2) {
if (
!Array.isArray(_arr1)
|| !Array.isArray(_arr2)
|| _arr1.length !== _arr2.length
) {
return false;
}
// .concat() to not mutate arguments
const arr1 = _arr1.concat().sort();
const arr2 = _arr2.concat().sort();
for (let i = 0; i < arr1.length; i++) {
if (arr1[i] !== arr2[i]) {
return false;
}
}
return true;
}
Array.prototype.compare = function(testArr) {
if (this.length != testArr.length) return false;
for (var i = 0; i < testArr.length; i++) {
if (this[i].compare) { //To test values in nested arrays
if (!this[i].compare(testArr[i])) return false;
}
else if (this[i] !== testArr[i]) return false;
}
return true;
}
var array1 = [2, 4];
var array2 = [4, 2];
if(array1.sort().compare(array2.sort())) {
doSomething();
} else {
doAnotherThing();
}
Maybe?
JavaScript has primitive data types and non-primitive data types.
For primitive data types, ==
and ===
check whether the things on either side of the bars have the same value. That's why 1 === 1
is true.
For non-primitive data types like arrays, ==
and ===
check for reference equality. That is, they check whether arr1
and arr2
are the same object. In your example, the two arrays have the same objects in the same order, but are not equivalent.
Two arrays, arr1
and arr2
, have the same members if and only if:
arr2
is in arr1
AND
arr1
is in arr2
So this will do the trick (ES2016):
const containsAll = (arr1, arr2) =>
arr2.every(arr2Item => arr1.includes(arr2Item))
const sameMembers = (arr1, arr2) =>
containsAll(arr1, arr2) && containsAll(arr2, arr1);
sameMembers(arr1, arr2); // `true`
This second solution using Underscore is closer to what you were trying to do:
arr1.sort();
arr2.sort();
_.isEqual(arr1, arr2); // `true`
It works because isEqual
checks for "deep equality," meaning it looks at more than just reference equality and compares values.
You also asked how to find out which things in arr1
are not contained in arr2
.
This will do it (ES2015):
const arr1 = [1, 2, 3, 4];
const arr2 = [3, 2, 1];
arr1.filter(arr1Item => !arr2.includes(arr1Item)); // `[4]`
You could also use Underscore's difference
: method:
_.difference(arr1, arr2); // `[4]`
See @Redu's comment—my solution is for sameMembers
, but what you may have in mind is sameMembersInOrder
also-known-as deepEquals
.
If you don't care about the order of the members of the arrays, ES2015+'s Set
may be a better data structure than Array
. See the MDN notes on how to implement isSuperset
and difference
using dangerous monkey-patching.
If order doesn't matter, it's still better to use sets. But if you must use arrays, this solution has better time complexity than the one I gave earlier:
function sameMembers(arr1, arr2) {
const set1 = new Set(arr1);
const set2 = new Set(arr2);
return arr1.every(item => set2.has(item)) &&
arr2.every(item => set1.has(item))
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With