In this lesson we'll take an array of objects and map it to a new array where each object is a subset of the original. We'll look at multiple ways to accomplish this, refactoring our code into a simple and easy to read function using Ramda's map
, pick
and project
functions.
Lets say we have an array of objects, we want to only pick the 'name' and 'price' props from each object:
const products = [ {name: 'Jeans', price:80, category: 'clothes'}, {name: 'Hoodie', price:60, category: 'clothes'}, {name: 'Jacket', price:120, category: 'clothes'}, {name: 'Cards', price: 35, category: 'games'}, {name: 'iPhone', price: 649, category: 'electronics'}, {name: 'Sauce Pan', price: 100, category: 'housewares'} ] const result = products.map(p => ({name: p.name, price: p.price})) console.log(result);
It works but as we can image that if we need to pick 10 props or even more, then it would be a problem, the code would be hard to read.
We can improve this by using Ramda's pick method:
const result = products.map(p => R.pick(['name', 'price'], p))
Then we can utilize Ramda automaticlly curry function to improve the code:
const result = products.map(R.pick(['name', 'price']))
Then we can extract the bussniess logic into a sprate function to make it resuable:
const getNameAndPrice = R.map(R.pick(['name', 'price'])); const result = getNameAndPrice(products);
Since it is a common pattern that "map to each object in array and pick certain props will it", we can use "R.project":
const getNameAndPrice = R.project(['name', 'price']); const result = getNameAndPrice(products);