Skip to content

Instantly share code, notes, and snippets.

@virtix
Created January 31, 2011 20:36
Show Gist options
  • Save virtix/804752 to your computer and use it in GitHub Desktop.
Save virtix/804752 to your computer and use it in GitHub Desktop.
Balisong.cfc
cfcomponent {
public any function filter(string predicate, any collection){
if( isArray(collection) ) return _filterArray(predicate,collection, [] );
if( isStruct(collection) ) return _filterStruct(predicate,collection, {} );
return collection;
}
//slightly different implementation for arrays
public any function _filterArray(string predicate, array collection, array accumulator){
for(item in collection){
if( isCollection(item) ) arrayAppend(accumulator, filter(predicate, item, accumulator) );
else if(refindnocase(predicate, item)) arrayAppend(accumulator, item);
}
return accumulator;
}
//slightly different implementation for structs
public any function _filterStruct(string predicate, struct collection, struct accumulator){
var _a = [];
for(item in collection){
if( isCollection(collection[item]) ) structInsert(accumulator, item, filter(predicate, collection[item], accumulator) );
else if (refindnocase(predicate, collection[item])) structInsert(accumulator, item, collection[item]);
}
return accumulator;
}
//full lib at https://github.com/virtix/balisong/raw/master/Balisong.cfc
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment