Javascript 比较相同数组的对象,并在特定属性与其他对象匹配时对其某些属性进行分组
我有一个对象数组,如下所示:Javascript 比较相同数组的对象,并在特定属性与其他对象匹配时对其某些属性进行分组,javascript,arrays,json,object,Javascript,Arrays,Json,Object,我有一个对象数组,如下所示: "orders": [ { "orderID": 1, "fullName": "xyz", "email": "xyz@gmail.com", "phone": "12345", "flatNo": "A-5", "complex": "tara tra", "landmar
"orders": [
{
"orderID": 1,
"fullName": "xyz",
"email": "xyz@gmail.com",
"phone": "12345",
"flatNo": "A-5",
"complex": "tara tra",
"landmark": null,
"street": null,
"area": "",
"city": "",
"productID": 2,
"name": "curd",
"price": 52,
"image": "curd.png",
"quantity": 1
},
{
"orderID": 1,
"fullName": "xyz",
"email": "xyz@gmail.com",
"phone": "12345",
"flatNo": "A-5",
"complex": "tara tra",
"landmark": null,
"street": null,
"area": "",
"city": "",
"productID": 1,
"name": "lassi",
"price": 65,
"image": "images\\rtoRAOwj4-conn.PNG",
"quantity": 1
},
{
"orderID": 2,
"fullName": "velocity",
"email": "velocity@gmail.com",
"phone": "999999",
"flatNo": "b-863",
"complex": "tara tra",
"landmark": "kaskd",
"street": "asdasd",
"area": "rob city",
"city": "asda",
"productID": 1,
"name": "lassi",
"price": 65,
"image": "images\\rtoRAOwj4-conn.PNG",
"quantity": 3
}
]
这里,如果对象的orderID相同,我希望将这些对象合并到单个对象中,并将产品信息创建到主数组中的一个对象数组中
这是我正在寻找的输出
"orders": [
{
"orderID": 1,
"fullName": "xyz",
"email": "xyz@gmail.com",
"phone": "12345",
"flatNo": "A-5",
"complex": "tara tra",
"landmark": null,
"street": null,
"area": "",
"city": "",
"products": [
{
"productID": 2,
"name": "curd",
"price": 52,
"image": "curd.png",
"quantity": 1
},
{
"productID": 1,
"name": "lassi",
"price": 65,
"image": "images\\rtoRAOwj4-conn.PNG",
"quantity": 1
}
]
},
{
"orderID": 2,
"fullName": "velocity",
"email": "velocity@gmail.com",
"phone": "999999",
"flatNo": "b-863",
"complex": "tara tra",
"landmark": "kaskd",
"street": "asdasd",
"area": "rob city",
"city": "asda",
"productID": 1,
"name": "lassi",
"price": 65,
"image": "images\\rtoRAOwj4-conn.PNG",
"quantity": 3
}
]
基本上,如果订单ID相同,我希望合并产品信息。如果您使用我的库进行此操作,您会很轻松
const data={orders:[{“orderID”:1,“fullName”:“xyz”,“email”:xyz@gmail.com“,”电话“:”12345“,”flatNo“:”A-5“,”复杂“:”tara-tra“,”landmark“,”空“,”街道“,”空“,”地区“,”城市“,”产品ID“,”2,“名称“,”凝乳“,”价格“,”52,“图像“:”凝乳.png“,”数量“:”1},“,”订单ID“:”1,“全名“:”xyz“,”电子邮件“:"xyz@gmail.com“,”电话“:”12345“,”flatNo“:”A-5“,”复杂“:”tara-tra“,”landmark“,”null“,”street“,”null“,”area“,”城市“,”productID“,”1,“名称“,”lassi“,”价格“,”65,“图像“:”images\\rtoawj4-conn.PNG“,”数量“,”1},{”orderID“:”2,“全名“:”velocity“,”电子邮件“:”velocity@gmail.com“,”电话“:”999999“,”flatNo“:”b-863“,”综合体“:”塔拉茶“,”地标“:”卡斯德“,”街道“,”asdasd“,”区域“,”罗伯市“,”城市“,”asda“,”产品ID“,”1,“名称“,”拉西“,”价格“,”65,“图像“:”图像\\ rtoRAOwj4-conn.PNG“,”数量“:”3}]}”
const{pipe,assign,reduce,get,pick,omit}=rubico
const productKeys=['productID','name','price','image','quantity']
const addOrderToMap=(m,order)=>{
if(m.has(order.orderID)){
m、 get(order.orderID).products.push(pick(productKeys)(order))
}否则{
m、 set(order.orderID{
…省略(产品密钥)(订单),
产品:[挑选(产品密钥)(订单)],
})
}
返回m
}
const groupedByOrderID=assign({
订单:管道([//分配订单键
获取('orders'),//数据=>orders
reduce(addOrderToMap,new Map()),//orders=>Map{orderID->orderWithProducts}
m=>m.values(),//映射{orderID->orderWithProducts}->迭代器{orderWithProducts}
Array.from,//迭代器{orderWithProducts}->[orderWithProducts]
]),
})(数据)
console.log(groupedByOrderID)
以防万一如果你想通过普通的JavaScript
来实现,你可以使用reduce
:
var data=[{“orderID”:1,“fullName”:“xyz”,“email”:xyz@gmail.com“,”电话“:”12345“,”flatNo“:”A-5“,”复杂“:”tara-tra“,”landmark“,”空“,”街道“,”空“,”地区“,”城市“,”产品ID“,”2,“名称“,”凝乳“,”价格“,”52,“图像“:”凝乳.png“,”数量“:”1},{”订单ID“:”1,“全名“:”xyz“,”电子邮件“:”xyz@gmail.com,“电话”:12345,“flatNo”:“A-5”,“complex”:“tara tra”,“landmark”:null,“street”:null,“area”:“city”:“productID”:1,“name”:“lassi”,“price”:65,“image”:“images\\rtoRAOwj4-conn.PNG”,“quantity”:1},{“orderID”:2,“fullName”:“velocity”,“email”:velocity@gmail.com“,”电话“:”999999“,”公寓“:”b-863“,”综合“:”塔拉茶“,”地标“:”kaskd“,”street“:”asdasd“,”area“:”rob city“,”城市“:”asda“,”productID“:”1,“name“:”lassi“,”price“:”65,“image“:”images\\rtoRAOwj4-conn.PNG“,”数量“:”3}];
var result=Object.values(data.reduce((acc,{productID,name,price,image,quantity,…rest})=>{
acc[rest.orderID]=acc[rest.orderID]|{……rest,产品:[]};
acc[rest.orderID].products.push({productID,name,price,image,quantity});
返回acc;
},{}));
控制台日志(结果)代码>如果您还有其他问题,我也会在这里活动。神奇的东西:)