Skip to content

Instantly share code, notes, and snippets.

@eethann
Created August 23, 2012 01:05
Show Gist options
  • Star 31 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save eethann/3430971 to your computer and use it in GitHub Desktop.
Save eethann/3430971 to your computer and use it in GitHub Desktop.
Underscore mixin with common iterator functions adapted to work with objects and maintain key/val pairs.
_.mixin({
// ### _.objMap
// _.map for objects, keeps key/value associations
objMap: function (input, mapper, context) {
return _.reduce(input, function (obj, v, k) {
obj[k] = mapper.call(context, v, k, input);
return obj;
}, {}, context);
},
// ### _.objFilter
// _.filter for objects, keeps key/value associations
// but only includes the properties that pass test().
objFilter: function (input, test, context) {
return _.reduce(input, function (obj, v, k) {
if (test.call(context, v, k, input)) {
obj[k] = v;
}
return obj;
}, {}, context);
},
// ### _.objReject
//
// _.reject for objects, keeps key/value associations
// but does not include the properties that pass test().
objReject: function (input, test, context) {
return _.reduce(input, function (obj, v, k) {
if (!test.call(context, v, k, input)) {
obj[k] = v;
}
return obj;
}, {}, context);
}
});
@eethann
Copy link
Author

eethann commented Aug 23, 2012

@eethann
Copy link
Author

eethann commented Sep 8, 2012

I added filter and reject, as per this issue: jashkenas/underscore#359.

And also because I needed it for the Drupal Backbone module.

@mikermcneil
Copy link

Nice

@Trylobot
Copy link

Trylobot commented Sep 3, 2013

Very useful, thank you

@mikermcneil
Copy link

+1 +1 +1
Can't even begin to describe how often I use these!!!

@jaredh159
Copy link

thanks for this

@boycce
Copy link

boycce commented Jun 16, 2014

Thanks dude.

@paulmelnikow
Copy link

Hey, I'd like to package this. Can you add a license?

@paulmelnikow
Copy link

Hey, just following up. Would you mind adding a license to this gist? Underscore uses MIT, or you could put it in the public domain. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment