sameness.js
Version:
A pure JavaScript object comparing library
1 lines • 2.03 kB
JavaScript
var Sameness=function(){function t(t){var e=[];for(var r in t)e.push(r);return e}function e(t){return t instanceof Object}function r(t){return t instanceof Array}function n(t){return e(t)&&!r(t)}return this.about="Sameness.js is a pure JavaScript object comparing library.It has the capability to check if objects a and b are: the same object (isSame); identic objects (isIdentical); equivalent objects (isEquivalent); and b a subset of a (isSubset)",this.isSame=function(t,e){var r=t===e;return r},this.isIdentical=function(e,r){var i;if(i=e==r,!i)if(n(e)&&n(r)){var a=t(e),s=t(r);if(a.length==s.length&&a.length+s.length>0){i=!0;for(var h=0;h<a.length;h++)if(a[h]!=s[h]||!this.isEquivalent(e[a[h]],r[s[h]])){i=!1;break}}}else if(e.length==r.length&&e.length+r.length>0){i=!0;for(var f=0;f<e.length;f++)if(!this.isEquivalent(e[f],r[f],c)){i=!1;break}}return i},this.isEquivalent=function(e,r){var i;if(i=e==r,!i)if(n(e)&&n(r)){for(var a=t(e),s=t(r),h=[],f=[],o=0;o<a.length;o++)h.push(a[o]);for(var u=0;u<s.length;u++)f.push(s[u]);for(i=!0;h.length>0;){for(var l=h.pop(),v=[],g=!1,c=0;c<f.length;c++){var p=f[c];g||e[l]!=r[p]&&!this.isEquivalent(e[l],r[p])?v.push(p):g=!0}if(!g){i=!1;break}f=v}f.length>0&&(i=!1)}else{for(var b=[],S=[],j=0;j<e.length;j++)b.push(e[j]);for(var k=0;k<r.length;k++)S.push(r[k]);for(i=!0;b.length>0;){for(var m=b.pop(),q=[],d=!1,E=0;E<S.length;E++){var y=S[E];m!=y||d?q.push(y):d=!0}if(!d){i=!1;break}S=q}S.length>0&&(i=!1)}return i},this.isSubset=function(e,r){var i;if(i=e==r,!i)if(n(e)&&n(r)){for(var a=t(e),s=t(r),h=[],f=[],o=0;o<a.length;o++)h.push(a[o]);for(var u=0;u<s.length;u++)f.push(s[u]);for(i=!0;f.length>0;){for(var l=f.pop(),v=[],g=!1,c=0;c<h.length;c++){var p=h[c];g||e[p]!=r[l]&&!this.isSubset(e[p],r[l])?v.push(p):g=!0}if(!g){i=!1;break}h=v}}else{for(var b=[],S=[],j=0;j<e.length;j++)b.push(e[j]);for(var k=0;k<r.length;k++)S.push(r[k]);for(i=!0;S.length>0;){for(var m=S.pop(),q=[],d=!1,E=0;E<b.length;E++){var y=b[E];y!=m||d?q.push(y):d=!0}if(!d){i=!1;break}b=q}}return i},this}();