omygoodness
omygoodness

Reputation: 365

Ramda - how to merge 2 or more arrays of objects

I am trying to merge arrays of objects into one clean array using Ramda but I need some help. I have sample JSON which is below. In this example, I have 2 groups but the number of groups can be 3, 4, 10. I am interested in tableItems array from each group.

const groups = [
  {
    id: '',
    name: '',
    tableItems: [
      {
        id: 1,
        name: 'John'
      },
      {
        id: 2,
        name: 'Paul'
      },
      {
        id: 3,
        name: 'Mary'
      }
    ]
  },
  {
    id: '',
    name: '',
    tableItems: [
      {
        id: 10,
        name: 'Brian'
      },
      {
        id: 20,
        name: 'Joseph'
      },
      {
        id: 30,
        name: 'Luke'
      }
    ]
  }
];

I tried something like this:

let mapValues = x => x.tableItems;
const testItems = R.pipe(
  R.map(mapValues)
)

And then I got arrays of my tableItems and now I would like to merge them into one array.

[
  [
    {
      "id": 1,
      "name": "John"
    },
    {
      "id": 2,
      "name": "Paul"
    },
    {
      "id": 3,
      "name": "Mary"
    }
  ],
  [
    {
      "id": 10,
      "name": "Brian"
    },
    {
      "id": 20,
      "name": "Joseph"
    },
    {
      "id": 30,
      "name": "Luke"
    }
  ]
]

Any help would be appreciated.

Upvotes: 0

Views: 1687

Answers (1)

Ori Drori
Ori Drori

Reputation: 191986

Use R.chain to map and flatten, and get the tableItems using R.prop:

const fn = R.chain(R.prop('tableItems'));

const groups = [{"id":"","name":"","tableItems":[{"id":1,"name":"John"},{"id":2,"name":"Paul"},{"id":3,"name":"Mary"}]},{"id":"","name":"","tableItems":[{"id":10,"name":"Brian"},{"id":20,"name":"Joseph"},{"id":30,"name":"Luke"}]}];

const result = fn(groups);

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.0/ramda.js"></script>

Upvotes: 3

Related Questions