【发布时间】:2021-01-12 01:11:20
【问题描述】:
我正在尝试在 JavaScript 中将对象数组转换为 “分组”和排序的输出数组,最好是 ES6 方式(例如,使用 .map、.reduce 等) .
总结:
- 对象数组
- 每个对象都是一个“项目”:a1,a2,b1,b2,...
- 每个对象都有一个类似于组/类别的“部分”属性
- 所需的输出数组应返回按“部分”分组的项目对象
- 部分和项目的输出数组的排序顺序也在属性中定义
const data = [
{ section: 'A', item: 'a1', section_order: 2, item_order: 2 },
{ section: 'B', item: 'b1', section_order: 1, item_order: 2 },
{ section: 'A', item: 'a2', section_order: 2, item_order: 1 },
{ section: 'B', item: 'b2', section_order: 1, item_order: 1 }
];
const desiredOutput = [
{
section: 'B', // should come first as section_order = 1
items: [
{ section: 'B', item: 'b2', section_order: 1, item_order: 1 }, // should come first as item_order = 1
{ section: 'B', item: 'b1', section_order: 1, item_order: 2 }, // should come second as item_order = 2
]
},
{
section: 'A', // should come second as section_order = 2
items: [
{ section: 'A', item: 'a2', section_order: 2, item_order: 1 },
{ section: 'A', item: 'a1', section_order: 2, item_order: 2 },
]
}
];
我看到了一个例子,它让我朝着正确的方向前进——但并不完全符合所需的输出,而且不符合排序顺序:
const result = data.reduce((accum, currElm) => {
const currSection = currElm['section'];
accum[currSection] = (accum[currSection] || []).concat(currElm);
return accum;
}, {});
【问题讨论】:
标签: javascript arrays object ecmascript-6 transform