Skip to content

Instantly share code, notes, and snippets.

@Wlada
Last active January 31, 2017 17:14
Show Gist options
  • Save Wlada/8dd740257ca437d9bc3d70fbda756117 to your computer and use it in GitHub Desktop.
Save Wlada/8dd740257ca437d9bc3d70fbda756117 to your computer and use it in GitHub Desktop.
Angular filter for filtering objects and nested objects by one property
app
.filter('deepFilter', function() {
return function(items, value, prop) {
if (!angular.isDefined(value) || value === '' || !angular.isDefined(prop) || prop === '') {
return items;
}
return items.filter(function(item) {
if (checkProp(item)) {
return true;
} else {
return checkDeepProp(item)
}
function checkDeepProp(o) {
var r = false;
angular.forEach(o, function(value, key) {
if (r) {
return true;
}
if (angular.isArray(value)) {
angular.forEach(value, function(nested) {
if (r) {
return true;
}
if (checkProp(nested)) {
r = true;
} else {
r = checkDeepProp(nested)
}
})
} else {
r = false;
}
});
return r;
}
function checkProp(o) {
if (o.hasOwnProperty(prop)) {
propLower = o[prop].toLowerCase();
valLower = value.toLowerCase();
return propLower.indexOf(valLower) !== -1;
} else {
return false;
}
}
});
};
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment