鍍金池/ 問答/HTML/ 請問一下嵌套數(shù)組里面的兩個children 合并為一個

請問一下嵌套數(shù)組里面的兩個children 合并為一個

原數(shù)組格式如下

let data= [
        {
            "name1": "第一級",
            "children2": [
                {
                    "name2": "第二級"
                }
            ],
            "children1": [
                {
                    "name1": "第二級",
                    "children2": [
                        {
                            "name2": "第三級"
                        }
                    ],
                    "children1": [
                        {
                            "name1": "第三級",
                            "children2": [
                                {
                                    "name2": "第四級"
                                },
                                {
                                    "name2": "第四級"
                                },
                            ]
                        },
                        {
                            "name1": "第三級",
                            "children2": [
                                {
                                    "name2": "第四級"
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        {
            "name1": "第一級",
            "children2": [],
            "children1": [
                {
                    "name1": "第二級",
                    "children2": [
                        {
                            "name2": "第三級"
                        },
                        {
                            "name2": "第三級"
                        }
                    ]
                }
            ]
        },
    ]

現(xiàn)在想將每一級的children2里面的對象合并到children1里面,如果沒有children1則新建children1。
希望合并后的格式如下

 [
        {
            "name1": "第一級",
            "children1": [
                {
                    "name2": "第二級" //來自children2
                },
                {
                    "name1": "第二級",
                    "children1": [
                        {
                            "name2": "第三級"  //來自children2
                        },
                        {
                            "name1": "第三級",
                            "children1": [           //來自children2
                                {
                                    "name2": "第四級"
                                },
                                {
                                    "name2": "第四級"
                                },
                                {
                                    "name2": "第四級"
                                },
                                {
                                    "name2": "第四級"
                                }
                            ]
                        },
                        {
                            "name1": "第三級",
                            "children1": [          //來自children2
                                {
                                    "name2": "第四級"
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        {
            "name1": "第一級",
            "children1": [
                {
                    "name1": "第二級",
                    "children1": [      //來自children2
                        {
                            "name2": "第三級"
                        },
                        {
                            "name2": "第三級"
                        }
                    ]
                }
            ]
        }
]

現(xiàn)在我通過這個方法可以返回正確的層次,但返回結(jié)果的格式是這樣的[Array(2), Array(1)],只有最里面的一級是對象,其他都是嵌套數(shù)組
圖片描述。

function transilate(data) {
   return data.map((item) => {
        if (item.children2) {
            if(item.children2.length>0){
                let concatR=item.children1?item.children1.concat(item.children2):item.children2
                item.children1=concatR
            }
            return transilate(item.children1)
        }
        return item
    });
}
transilate(data)

JS Bin 代碼地址JS Bin 打開控制臺看輸出

請問一下該如何修改代碼或有什么其他方法可以實現(xiàn)想要的效果?

回答
編輯回答
不二心

return transilate(item.children1) -> transilate(item.children1)

2018年8月4日 00:38
編輯回答
毀了心

題主的 result 給的有錯啊,,,

let test = JSON.parse(JSON.stringify(data));

function childrenIterator(arr) {
    arr.map(function(obj) {

        if (obj.children2 && obj.children2.length !== 0) {
            obj.children2.forEach(function(o) {
                obj.children1 ? obj.children1.push(o) : obj.children1 = [o];
            });
        }

        delete obj.children2;

        if (obj.children1) {
            childrenIterator(obj.children1);
        }

        return obj;
    });

    return arr;
}
console.log(JSON.stringify(childrenIterator(test)));
2017年12月26日 14:44
編輯回答
終相守
function transilate(data) {
   return data.map((item) => {
        if (item.children2) {
            if(item.children2.length>0){
                let concatR=item.children1?item.children1.concat(item.children2):item.children2
                item.children1=concatR
            }
            delete item.children2
            item.children1 = transilate(item.children1)
        }
        return item
    });
}
2017年11月13日 11:27