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;
},{}));

控制台日志(结果)如果您还有其他问题,我也会在这里活动。神奇的东西:)