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);
}
}, []);
我检索了作为数组 [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);
}
}, []);