Skip to content

Instantly share code, notes, and snippets.

@juliankrispel
Created May 29, 2013 06:17
Show Gist options
  • Select an option

  • Save juliankrispel/5668295 to your computer and use it in GitHub Desktop.

Select an option

Save juliankrispel/5668295 to your computer and use it in GitHub Desktop.
depp_contains
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