Я пытаюсь получить два значения (метка и данные) из массива исходных данных, переименовать значение метки и отсортировать метку и массив данных в результирующем объекте.
Если это мои исходные данные...
const sourceData = [
{ _id: 'any', count: 12 },
{ _id: 'thing', count: 34 },
{ _id: 'value', count: 56 }
];
... результат должен быть следующим:
{ label: ['car', 'plane', 'ship'], data: [12, 34, 56] }
Таким образом, любой должен стать автомобилем , вещь должна стать плоскостью , а значение должно стать кораблем .
Но я также хочу изменить порядок элементов вмассивы результатов, использующие значения меток, которые также должны упорядочивать значения данных.
Предположим, что этот результат ожидается:
{ label: ['ship', 'car', 'plane'], data: [56, 12, 34] }
При следующем решении естьнужно две переменные (maps
и order
). Я думаю, что было бы лучше использовать только один вид карты, который должен устанавливать новые значения меток, а также порядок. Может с массивом ?! Прямо сейчас упорядочиваются только значения меток, но значения данных должны быть упорядочены таким же образом ...
const maps = { any: 'car', thing: 'plane', value: 'ship' }; // 1. Rename label values
const result = sourceData.reduce((a, c) => {
a.label = a.label || [];
a.data = a.data || [];
a.label.push(maps[c._id]);
a.data.push(c.count);
return a;
}, {});
result.label.sort((a, b) => {
const order = {'ship': 1, 'car': 2, plane: 3}; // 2. Set new order
return order[a] - order[b];
})