Compare two Arrays Javascript - Associative
This is an old question, but since it comes up first in a google search for comparing arrays, I thought I would throw in an alternative solution that works even when the array has two different objects with the same values.
function arrays_equal(a, b) { return JSON.stringify(a) == JSON.stringify(b);}
Note: This is order dependent, so if order doesn't matter, you can always do a sort ahead of time.
I think the following should do what you want:
function nrKeys(a) { var i = 0; for (key in a) { i++; } return i;}function compareAssociativeArrays(a, b) { if (a == b) { return true; } if (nrKeys(a) != nrKeys(b)) { return false; } for (key in a) { if (a[key] != b[key]) { return false; } } return true;}
I really don't know if there is a nicer way to do it than the brute force approach:
function differences(a, b){ var dif = {}; for(key in a){ //In a and not in b if(!b[key]){ dif[key] = a[key]; } } for(key in a){ //in a and b but different values if(a[key] && b[key] && a[key]!=b[key]){ //I don't know what you want in this case... } } for(key in b){ //in b and not in a if(!a[key]){ dif[key] = b[key]; } } return dif;}
Also, they are objects, not arrays, and some properties will not be enumerable through for..in (like Array.length, for example), so take it into account for your application.