Как построить несколько словарей для массива в реагировать родной - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь отобразить данные «Развернуть / Свернуть плоский список» в реагирующей нативе. Это как одинокий родитель с несколькими детьми. Так что, если пользователь нажмет на ячейку, я должен показать несколько строк для этого развернуть / свернуть.

Но я получаю данные с сервера, как показано ниже.

[{
    code: '1212',
    name: 'Bajaj Model 1',
    url: 'Some url',
    category: 'Bike'
  },
  {
    code: '1213',
    name: 'Bajaj Model 2',
    url: 'other url',
    category: 'Bike'
  },
  {
    code: '1454',
    name: 'BMW Model 1',
    url: 'Some url',
    category: 'Car'
  },
  {
    code: '1454',
    name: 'BMW Model 2',
    url: 'Some url',
    category: 'Car'
  }
]

Итак, все данные Bike , я должен показать одно место, как Родитель и ребенок.

Для этого я сделал фильтр.

  const fundsFilterData = mapValues(groupBy(response, 'category'),
    fundslist => fundslist.map(item => omit(item, 'category')));

И я получаю как следует.

{
  'Bike': [{
      code: '1212',
      name: 'Bajaj Model 1',
      url: 'Some url'
    },
    {
      code: '1213',
      name: 'Bajaj Model 2',
      url: 'other url'
    },
  ],
  'Car': [{
      code: '1454',
      name: 'BMW Model 1',
      url: 'Some url'
    },
    {
      code: '1454',
      name: 'BMW Model 2',
      url: 'other url'
    },
  ]
}

Но я хочу сделать его массивом вместе с некоторыми предварительно добавленными ключами, такими как:

[{
    'Title': 'Bike',
    'Values': [{
        'code': '1212',
        'name': 'Bajaj Model 1',
        'url': 'Some url'
      },
      {
        'code': '1454',
        'name': 'Bajaj Model 2',
        'url': 'other url'
      }
    ]
  },
  {
    'Title': 'Car',
    'Values': [{
        'code": '
        1454 ',
        'name": '
        BMW Model 1 ',
        'url": '
        Some url '
      },
      {
        'code': '1454',
        'name': 'BMW Model 2',
        'url': 'Some url'
      }
    ]
  }
}

Чтобы я мог отображать заголовки в заголовках, а после того, как пользователь нажал на строку, я могу показать дочерние данные как развернутые.

Есть предложения?

1 Ответ

2 голосов
/ 07 июня 2019

Используйте _.map(), который возвращает массив, а не _.mapValues(). В _.map() получите Title (ключ) от второго параметра. Используйте его и значения (после _.omit()), чтобы создать объект для каждой группы.

const { map, groupBy, omit } = _;

const response = [{"code":"1212","name":"Bajaj Model 1","url":"Some url","category":"Bike"},{"code":"1213","name":"Bajaj Model 2","url":"other url","category":"Bike"},{"code":"1454","name":"BMW Model 1","url":"Some url","category":"Car"},{"code":"1454","name":"BMW Model 2","url":"Some url","category":"Car"}];

const fundsFilterData = map(
  groupBy(response, 'category'),
  (list, Title) => ({
    Title,
    Values: list.map(item => omit(item, 'category'))
  })
);

console.log(fundsFilterData);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
...