javascriptで下記の2つのオブジェクトをマージしたいと思っております。
valの値は共通しているので”A”という結果になり、childの値はそれぞれ異なるためどちらの値も残し、マージしたいのですがどのような実装が考えられますでしょうか。

ライブラリはjQueryを使用しております。

マージ元

obj1 = {
    val : "A",
    child : [{
        child_val: 'B',
    }]
}

obj2 = {
    val : "A",
    child : [{
        child_val: 'C',
    }]
}

obj3 = {
    val : "D",
    child : [{
        child_val: 'B',
    }]
}

obj1,obj2をマージした際に期待する結果

obj = {
    val : "A",
    child : [{
        child_val: 'B',
    },{
        child_val: 'C',
    }]
}

obj1,obj2,obj3をマージした際に期待する結果

obj = 
[{
    val : "A",
    child : [{
        child_val: 'B',
    },{
        child_val: 'C',
    }]
},
{
    val : "D"
    child : [{
        child_val: 'B',
    }]
}]

追記:
説明のために簡略化しておりましたがかえってややこしくしてしまっていたかもしれません。
失礼致しました。
やりたかったこととしては、ディレクトリのパスを複数取得し、下記objのような階層構造を作るのが目的でした。

下記のように複数のパスを配列に格納していたとして、

[
     "A/B/C/D/E",
     "A/B/C/D",
     "A/B/D",
     "B/B/C/D"
]

最終的にobjの構造に変換する

obj =
[
    {
        val : "A",
        child : [{
            val : "B",
            child : [
                {
                    val : "C",
                    child : [{
                        val : "D",
                        child : [{
                            val : "E"
                        }]
                    }]
                },
                {
                    val : "D"
                }
            ]
        }]
    },
    {
        val : "B",
        child : [{
            val : "B",
            child : [
                {
                    val : "C",
                    child : [{
                        val : "D"
                    }]
                }
            ]
        }]
    }
]

上記を実現するためパスごとに階層構造を作成し、最終的にマージしようとした所で躓き、質問させていただいた次第です。