JavaScript的数组对象合并问题求助

如下代码中,根据我自己写的方法进行合并,得到的结果并不是我想要的,我该如何进行修改和完善才能得到想要的结果呢?
先看我的代码:

var prd = {
    "id": 1,
    "department_id": 42,
    "products": [{
            "id": 12,
            "item_id": 676,
            "name": "49da",
            "price": 78,
            "grouped_addons": [{
                "addons": [{
                        "id": "0_0_40",
                        "name": "rice",
                        "qty": 0,
                        "unit_price": "5.00"
                    },
                    {
                        "id": "0_0_41",
                        "name": "what",
                        "qty": 1,
                        "unit_price": "15.00"
                    }
                ]
            }]
        },
        {
            "id": 12,
            "name": "49da",
            "price": 90,
            "item_id": 677,
            "grouped_addons": [{
                "addons": [{
                    "id": "0_0_40",
                    "name": "rice",
                    "qty": 0,
                    "unit_price": "5.00"
                }, {
                    "id": "0_0_41",
                    "name": "what",
                    "qty": 1,
                    "unit_price": "15.00"
                }]
            }]
        },
        {
            "id": 42,
            "name": "345dd",
            "item_id": 678,
            "grouped_addons": [{
                "addons": [{
                    "id": "0_0_42",
                    "name": "rice",
                    "qty": 0,
                    "unit_price": "5.00"
                }, {
                    "id": "0_0_43",
                    "name": "what",
                    "qty": 1,
                    "unit_price": "15.00"
                }]
            }]
        },
        {
            "id": 48,
            "name": "33ffg",
            "item_id": 679,
            "price": 90,
            "grouped_addons": [{
                "addons": [{
                    "id": "0_0_44",
                    "name": "rice",
                    "qty": 0,
                    "unit_price": "5.00"
                }, {
                    "id": "0_0_45",
                    "name": "what",
                    "qty": 1,
                    "unit_price": "15.00"
                }]
            }]
        },
        {
            "id": 48,
            "name": "33ffg",
            "item_id": 680,
            "price": 100,
            "grouped_addons": [{
                "addons": [{
                    "id": "0_0_44",
                    "name": "rice",
                    "qty": 4,
                    "unit_price": "5.00"
                }, {
                    "id": "0_0_45",
                    "name": "what",
                    "qty": 3,
                    "unit_price": "15.00"
                }]
            }]
        },
        {
            "id": 48,
            "name": "33ffg",
            "price": 200,
            "item_id": 681,
            "grouped_addons": [{
                "addons": [{
                    "id": "0_0_44",
                    "name": "rice",
                    "qty": 4,
                    "unit_price": "5.00"
                }, {
                    "id": "0_0_45",
                    "name": "what",
                    "qty": 1,
                    "unit_price": "15.00"
                }]
            }]
        }
    ]
}
var mp = prd.products.reduce((obj, item) => {
        if (!obj[item.id]) {
            obj[item.id] = [item]
        } else {
            obj[item.id].push(item)
        }
        return obj
    }, {})
    let cv = Object.keys(mp).map(id => {
        return mp[id].reduce((state, item) => {
            console.log('item',item)
            if(JSON.stringify(item.grouped_addons)===JSON.stringify(state.grouped_addons)){
                state.price += item.price
                
            }
            return state
        })
    })
    console.log(JSON.stringify(cv))
    

我想要的最终结果应该是如下,只合并grouped_addons相同的item,不相同的不进行合并:

[{
                "id": 12,
                "item_id": 676,
                "name": "49da",
                "price": 168,
                "grouped_addons": [{
                    "addons": [{
                            "id": "0_0_40",
                            "name": "rice",
                            "qty": 0,
                            "unit_price": "5.00"
                        },
                        {
                            "id": "0_0_41",
                            "name": "what",
                            "qty": 1,
                            "unit_price": "15.00"
                        }
                    ]
                }]
            },
            .......
阅读 1.8k
3 个回答

通过努力已经解决了

写个递归判断吧,别直接stringfy,这种数据形式多级的你要判断有相同完整的一项,我一直是自己写个专用的递归。(小声的问一下这是什么商城么)

怎么合并?
合并规则是什么呀?真心没看懂算法要求。结果也省略,更看不懂。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题