这可能是答案:
function denormalizeData(data) {
let result = Object.values( // Index keys, starting with 0
data.reduce((r, {order}, i, arr) => { // Push items to order, matching on unique cart_id
let {header, line} = arr[i];
let item = {header, line};
r[order.cart_id] = (r[order.cart_id] || {order, items: []});
r[order.cart_id].items.push(item);
item.header.set_no = Object.keys(r).indexOf(order.cart_id);
item.line.line_no = r[order.cart_id].items.length - 1;
return r;
}, {})
);
console.log(JSON.stringify(result, null, 4));
}
denormalizeData(data);
如你所见,
line_no
是当前顺序中的一个减一项,所以我使用
items.length - 1
在那里。
但是
set_no
是有点复杂,因为顺序块可能无序,这就是为什么我得到当前顺序的索引(一些魔术与对象键,因为这不是一个数组,而是一个对象)。
还有,我把流浪汉
order
从输出结构匹配您的示例。