Ramda - как объединить 2 или более массивов объектов - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь объединить массивы объектов в один чистый массив с помощью Ramda, но мне нужна помощь. У меня есть образец JSON, который ниже. В этом примере у меня 2 группы, но количество групп может быть 3, 4, 10. Меня интересует массив 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'
      }
    ]
  }
];

Я пробовал что-то вроде этого:

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

А затем я получил массивы моих tableItems, и теперь я хотел бы объединить их в один массив.

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

Любая помощь будет принята с благодарностью.

1 Ответ

3 голосов
/ 05 мая 2020

Используйте R.chain для сопоставления и сглаживания и получите tableItems с помощью 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>
...