Skip to content

Instantly share code, notes, and snippets.

@aclave1
Last active August 29, 2015 13:55
Show Gist options
  • Save aclave1/8764249 to your computer and use it in GitHub Desktop.
Save aclave1/8764249 to your computer and use it in GitHub Desktop.
Equality Stack
/**
Constructor function which keeps an array of objects, and makes sure they are all equal.
Used for checking consistency between many objects easily.
for example:
create a bunch of objects that should be exactly the same.
var data1 = object.serialize();
var data2 = object2.parse(data1).toJSON();
var data3 = JSON.parse(JSON.stringify(object2));
var eq = new EqualityStack( data1,data2,data3);
OR
var eq = new EqualityStack( [data1,data2,data3]);
OR
var eq = new EqualityStack( [data1], data2, data3, [data5,data6,data7,] );
The constructor and the add method can take any number of comma separated arrays of objects, and objects,
add objects to your equality stack with EqualityStack.add();
var data = {
time:"4:00",
nestedObject = {
innerproperties:{
url:'https://google.com'
}
}
};
eq.add(data);
Test Equality!
var shouldbetrue = eq.compareStack();
Get the array of identical objects!
var objects = eq.
*/
var EqualityStack = function() {
var that = this;
var objects = [];
var args = Array.prototype.slice.call(arguments, 0);
for (var i in args) {
if (args[i].push) {
for (var k in args[i]) {
objects.push(args[i][k]);
}
} else {
objects.push(args[i]);
}
}
var equals = function(ob1, ob2) {
for (var k in ob1) {
if (typeof ob1[k] === 'object') {
equals(ob1[k], ob2[k]);
} else {
if (ob1[k] !== ob2[k]) {
return false;
}
}
}
for (var j in ob2) {
if (typeof ob2[j] === 'object') {
equals(ob1[j], ob2[j]);
} else {
if (ob1[j] !== ob2[j]) {
return false;
}
}
}
return true;
};
this.add = function() {
var args = Array.prototype.slice.call(arguments, 0);
for (var i in args) {
if (args[i].push) {
for (var k in args[i]) {
objects.push(args[i][k]);
}
} else {
objects.push(args[i]);
}
}
};
this.clear = function() {
objects = [];
};
this.compareStack = function() {
var comparator = objects[0];
if (objects.length > 1) {
for (var i = 1; i < objects.length; i++) {
if (!equals(comparator, objects[i])) {
return false;
}
}
}
return true;
};
this.getObjects = function() {
return objects;
};
};
/**
Here's some sample usage:
*/
var a = {
'data': 'yip',
innerOb: {
'prop': 'yup',
'inner-inner': {
'inner-inner-inner': '51'
}
}
};
var b = {
'data': 'yip',
innerOb: {
'prop': 'yup',
'inner-inner': {
'inner-inner-inner': '51'
}
}
};
var c = {
'data': 'yip',
innerOb: {
'prop': 'yup',
'inner-inner': {
'inner-inner-inner': '51'
}
}
};
var arr = [a, b, c];
var eq = new EqualityStack(arr, a, b, c);
eq.add(arr);
var eqobs = eq.getObjects();
var shouldbetrue = eq.compareStack();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment