Javascript 对象键数组和聚合重复项

Javascript key array by object and aggregate duplicates

我检索了作为数组 [Orders] 返回的订单对象的列表,该列表可以是任意大小。每个订单对象的结构如下。我试图从订单中提取客户作为一个关键,并按每个客户对订单进行分组。

order: {
 details: {
   price: ""
 }
 customer: {
   name: "blah blah"
   email: "blah@gmail.com"
 }
} 

我需要找出将每个订单分组到特定客户的最佳方式。确保如果多个订单返回给同一个客户,它们会忽略重复项并仍然将订单添加到属于每个客户的数组中。理想的输出是

customer: {
  name: "Blah Blah",
  email: "blah@gmail.com",
  orders: [Orders]
}

这可能可以通过在堆栈溢出中搜索如何对项目数组进行分组来找到,并且可能是重复的...

但是,假设您想通过电子邮件对客户进行分组,这样的方法应该适合您。

var result = orders.reduce(customers, order => {
    // comparing customers by email
    var customer = customers.find(c => c.email === order.customer.email);

    if (!customer) {
        customer = {
            name: order.customer.name,
            email: order.customer.email,
            orders: [ order ]
        };
        // or use spread syntax, if you have that available
        // customer = { ...order.customer, orders: [ order ] }
        customers.push(customer);
    } else {
        customer.orders.push(order);
    }
}, []);