An example using reduce() in Underscore.js
I never learned how to use reduce in Python since our BDFL recommended against it. But since JavaScript doesn't have list comprehensions, I'm learning some functional constructs in Underscore.js.
Underscore's reduce()
function can be used to reduce an array of things into a single thing. A common use is computing the sum of an array of numbers. Like map
and filter
, it provides an alternative to a for loop. Reduce is not limited to returning a single thing and can be used to combine the functionality of map and filter like a Python list comprehension. Learning Underscore's reduce
also helped me understand MapReduce and reducers in Redux.
Here is an example that uses reduce
to create a single JavaScript object from an array of objects. An empty object, {}
, is passed in to _.reduce()
as the initial state. It is then extended with each item in the array and finally returned. I also did the same example using _.each()
for comparison, (update) and using Array.prototype.reduce
and ES6 w/o Underscore.
Example using Underscore's reduce
¶
var myArr = [
{ rating: 5 },
{ price: 200 },
{ distance: 10 }
];
var myObj = _.reduce( myArr, function( memo, item ) {
return _.extend( memo, item ); }, {} );
console.log( myObj );
Here is the output:
{ rating: 5, price: 200, distance: 10 }
Example using Underscore's each
¶
Here is the same example using _.each
:
var myArr = [
{ rating: 5 },
{ price: 200 },
{ distance: 10 }
];
var myObj = {};
_.each( myArr, function( item ) {
myObj = _.extend( myObj, item ); });
console.log( myObj );
The output is the same:
{ rating: 5, price: 200, distance: 10 }
Example using ES6 and Array.prototype.reduce
¶
Update 2015-12-11: I have been writing ES6 with React thanks to Babel so here is an ES6 version without Underscore.js. It looks very similar to the Underscore version. reduce()
is now a method of the array and Object.assign()
takes the place of _.extend()
. ( Array.prototype.reduce
is actually ES5, but Object.assign
and const
are ES6. )
const myArr = [
{ rating: 5 },
{ price: 200 },
{ distance: 10 }
];
const myObj = myArr.reduce( function( memo, item ) {
return Object.assign( {}, memo, item ); }, {} );
console.log( myObj );
The output is the same:
{ rating: 5, price: 200, distance: 10 }
Related posts
- How to use ast-grep with GraphQL — posted 2024-09-24
- Next.js App Router (RSC) projects w/ open source code — posted 2024-07-30
- Next.js Relay GraphQL Pokemon example — posted 2024-05-22
- Example Node.js Passport.js SAML app using OneLogin — posted 2024-05-10
- Aphrodite to CSS Modules codemod — posted 2022-12-09
- Simple codemod example with jscodeshift — posted 2021-05-03