我正在尝试从我的源数据数组中获取两个值(标签和数据),重命名标签值并在结果对象中对标签和数据数组进行排序。
如果这是我的源数据...
const sourceData = [
{ _id: 'any', count: 12 },
{ _id: 'thing', count: 34 },
{ _id: 'value', count: 56 }
];
最终结果应该是:
{ label: ['car', 'plane', 'ship'], data: [12, 34, 56] }
因此,任何any都应变为car,thing应变为plane,而value应变为ship。
但我还想使用标签值改变结果数组中的元素顺序,这也应该按照数据值排序。
假设预期结果如下:
{ 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];
})
reduce
->sort
(或sort
->reduce
)相比,这最终会使代码难以阅读和维护。 - VLAZconst config = { any: { value: 'car', order: 2}, thing: { value: 'plane', order: 3}, value: { value: 'ship', order: 1} }
- VLAZ