Created
May 29, 2013 06:17
-
-
Save juliankrispel/5668295 to your computer and use it in GitHub Desktop.
depp_contains
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| var getType = function(thing){ | |
| if(thing === null) return "[object Null]"; | |
| return Object.prototype.toString.call(thing); | |
| } | |
| // Determines whether all properties of data are contained in containsData | |
| var deepContains = function contains(data, containsData ) { | |
| for (var i in data){ | |
| var key = i; | |
| if(key.indexOf('not_') === 0){ | |
| key = key.substr(4); | |
| if(switcher(key, data[i]) !== false) | |
| return false; | |
| }else{ | |
| if(switcher(key, data[i]) == false) | |
| return false; | |
| } | |
| } | |
| function switcher(key, val){ | |
| if(_.has(containsData, key)){ | |
| switch(getType(val)){ | |
| case '[object String]': | |
| if (val.indexOf('!') < 0 && data[key] !== containsData[key]) | |
| return false; | |
| break; | |
| case '[object Null]': | |
| if (val !== containsData[key]) | |
| return false; | |
| break; | |
| case '[object Number]': | |
| if (val !== containsData[key]) | |
| return false; | |
| break; | |
| case '[object Array]' : | |
| // Returns true if none of the | |
| var result = true; | |
| // If both stores do not contain null | |
| if (containsData[key] !== null && val !== null){ | |
| for (var x in val){ | |
| if ( !contains( val[x], containsData[key] ) ){ | |
| result = false; | |
| } | |
| } | |
| } | |
| return result; | |
| break; | |
| case '[object Object]' : | |
| return contains(val, containsData[key]); | |
| break; | |
| default : | |
| console.error('Type of input not handled. Input = ' + typeof val); | |
| return false; | |
| } | |
| } | |
| } | |
| return true; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment