Ramda is your friend
Tags: ramda, javascript, data
Published: 2021-10-08 10:46:20


![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/okp6yjk5nrxvhs56fs7a.jpg)

Many times, When you are working with data via RestAPi, other data models. 
You will find yourself need to make some manipulation for many reasons.
I think that Ramda can be a good tool for you to solve this issue.
Ramda offers a different style of coding, a style of functional programming.
Ramda makes it simple for you to build complex logic through functional composition.
You can break your logic into a small pure function.
Function input is never changed, so you can memorize it forgive a better performance if you need it.
It creates an abstraction of each part that makes it simple to solve and test.

for this example, I generate data via "json-generator.com"

```javascript
const data = [
  {
    "_id": "61600fb5f380c60dd8a9b18a",
    "index": 0,
    "guid": "4c874a3b-5ae1-422b-87df-43247d150436",
    "isActive": true,
    "balance": "$1,546.67",
    "picture": "http://placehold.it/32x32",
    "age": 29,
    "eyeColor": "green",
    "name": "Flossie Bender",
    "gender": "female",
    "company": "ZENTIA",
    "email": "flossiebender@zentia.com",
    "phone": "+1 (831) 577-3188",
    "address": "406 Gilmore Court, Osage, American Samoa, 6924",
    "registered": "2020-04-21T08:36:18 -03:00",
    "latitude": -74.741807,
    "longitude": -54.937456,
    "languages": {
      "english": true,
      "spanish": false,
      "german": true
    },
    "tags": [
      "duis",
      "aliquip",
      "cillum",
      "duis",
      "cillum",
      "ad",
      "dolore"
    ],
    "friends": [
      {
        "id": 0,
        "name": "Underwood Ross"
      },
      {
        "id": 1,
        "name": "Brady Mcdaniel"
      },
      {
        "id": 2,
        "name": "Mays Mccoy"
      }
    ],
    "greeting": "Hello, Flossie Bender! You have 1 unread messages.",
    "favoriteFruit": "apple"
  },
  {
    "_id": "61600fb5d3858d81df8d8b1f",
    "index": 1,
    "guid": "c576d6d6-62e0-4e68-86ef-851cedbcccdd",
    "isActive": false,
    "balance": "$2,146.29",
    "picture": "http://placehold.it/32x32",
    "age": 37,
    "eyeColor": "brown",
    "name": "Frazier Chaney",
    "gender": "male",
    "company": "APPLIDEC",
    "email": "frazierchaney@applidec.com",
    "phone": "+1 (996) 462-2960",
    "address": "457 Clinton Street, Wescosville, Delaware, 8133",
    "registered": "2019-06-03T10:35:59 -03:00",
    "latitude": -39.993771,
    "longitude": -174.168324,
    "languages": {
      "english": true,
      "spanish": true,
      "german": false
    },
    "tags": [
      "reprehenderit",
      "veniam",
      "nostrud",
      "sunt",
      "veniam",
      "fugiat",
      "adipisicing"
    ],
    "friends": [
      {
        "id": 0,
        "name": "Nichols Ferrell"
      },
      {
        "id": 1,
        "name": "Ingrid Houston"
      },
      {
        "id": 2,
        "name": "Wilda Branch"
      }
    ],
    "greeting": "Hello, Frazier Chaney! You have 1 unread messages.",
    "favoriteFruit": "banana"
  }
]
```

```javascript
const getCompanyAndAddress = R.props(['company','address']);
const haveGermanLanguage = R.path(['languages','german']);
const getSubsetNameAge = R.pick(['name','age']);

R.map(getCompanyAndAddress,data) // [["ZENTIA", "406 Gilmore Court, Osage, American Samoa, 6924"], ["APPLIDEC", "457 Clinton Street, Wescosville, Delaware, 8133"]]

R.map(haveGermanLanguage, data) // [true, false]

R.map(getSubsetNameAge)(data) // [{"age": 29, "name": "Flossie Bender"}, {"age": 37, "name": "Frazier Chaney"}]

R.map(
  R.pipe(
   R.prop("friends"), R.pluck('name')
  )
 )(data)
// [["Underwood Ross", "Brady Mcdaniel", "Mays Mccoy"], ["Nichols Ferrell", "Ingrid Houston", "Wilda Branch"]]
```

Link to Ramda - https://ramdajs.com/
Enjoy 😊