如何将相同条件的对象集组合成一个新数组合并到以前的数组中并且保持旧数组格式相同

例子:

let array = [
            {
                key:'text',
                label:'菜单',
                use:'f-text',
                group:'常规',
                col: 8,
                value:{
                      default:"这里是标题"
                },
            },
            {
                key:'btn_style_enable',
                label:'启用按钮样式',
                use:'f-switch',
                group:'常规',
                col: 8,
                value:{
                      default: 'no'
                },
            },
            {
                key:'number',                                                        //组合1
                label:'个数',
                use:'f-number',
                group:'常规',
                col: 8,
                fold:{
                      btn_style_enable:'yes',
                      sourse:'product',
                },
                value:{
                      default: 4
                },
            },
            {
                key:'color',                                                           //组合1
                label:'颜色',
                use:'f-color',
                group:'常规',
                col: 8,
                fold:{
                       btn_style_enable:'yes',
                      sourse:'product',
                },
                value:{
                      default:"#ececec"
                },
            },
            {
                key:'coums',
                label:'列数',
                use:'f-number',
                group:'常规',
                col: 8,
                value:{
                      default:2
                },
            },
            {
                key:'text_font_enable',
                label:'启用文本样式',
                use:'f-switch',
                group:'常规',
                col: 8,
                value:{
                      default:'no'
                },
            },
            {
                key:'text_font',                                                                 //组合2
                label:'文本样式',
                use:'f-style',
                group:'常规',
                col: 8,
                fold:{
                      text_font_enable:'yes',
                      sourse:'product',
                },
                value:{
                      default:[]
                },
            },
            {
                key:'text_number',                                                             //组合2
                label:'文字字数限制',
                use:'f-number',
                group:'常规',
                col: 8,
                fold:{
                      text_font_enable:'yes',
                      sourse:'product',
                },
                value:{
                      default:120
                },
            },
            {
                key:'btn_border',                                                        //组合1
                label:'个数',
                use:'f-color',
                group:'常规',
                col: 8,
                fold:{
                      btn_style_enable:'yes',
                      sourse:'product',
                },
                value:{
                      default: "#000"
                },
            },
        ]

//改变成array2
let array2 = [
            {
                key:'text',
                label:'菜单',
                use:'f-text',
                group:'常规',
                col: 8,
                value:{
                      default:"这里是标题"
                },
            },
            {
                key:'btn_style_enable',
                label:'启用按钮样式',
                use:'f-switch',
                group:'常规',
                col: 8,
                value:{
                      default: 'no'
                },
            },
            {    
                fold:{
                      btn_style_enable:'yes',
                      sourse:'product',
                },
                children:[
                    {
                        key:'number',                                                        //组合1
                        label:'个数',
                        use:'f-number',
                        group:'常规',
                        col: 8,
                        value:{
                              default: 4
                        },
                    },
                    {
                        key:'color',                                                           //组合1
                        label:'颜色',
                        use:'f-color',
                        group:'常规',
                        col: 8,
                        value:{
                              default:"#ececec"
                        },
                    },
                    {
                        key:'btn_border',                                                        //组合1
                        label:'个数',
                        use:'f-color',
                        group:'常规',
                        col: 8,
                        value:{
                              default: "#000"
                        },
                    },
                ]
                
            },
            {
                key:'coums',
                label:'列数',
                use:'f-number',
                group:'常规',
                col: 8,
                value:{
                      default:2
                },
            },
            {
                key:'text_font_enable',
                label:'启用文本样式',
                use:'f-switch',
                group:'常规',
                col: 8,
                value:{
                      default:'no'
                },
            },
            {
                fold:{
                      text_font_enable:'yes',
                      sourse:'product',
                },
                
                children:[
                    {
                        key:'text_font',                                                                 //组合2
                        label:'文本样式',
                        use:'f-style',
                        group:'常规',
                        col: 8,
                        value:{
                              default:[]
                        },
                    },
                    {
                        key:'text_number',                                                             //组合2
                        label:'文字字数限制',
                        use:'f-number',
                        group:'常规',
                        col: 8,
                        value:{
                              default:120
                        },
                    },
                ]
            },
        ]

这样子怎么实现

读取数据到一个map里面,如果已经存在,则累加,否则插入
之后再遍历map