この質問はほぼマルチポストです。元の質問はこちらです。https://teratail.com/questions/140995
teratailの方での質問の仕方に問題を感じたのもあり、より簡略化した質問をこちらにさせて頂きました。
ご指摘頂いたので上記追記致します。

let objectList = [

  {
    objectId : 1,
    objectName : "オブジェクト1",
    isLeaf : false,
    children : []
  },
  {
    objectId : 2,
    objectName : "オブジェクト2",
    isLeaf : true
  },
  {
    objectId : 3,
    objectName : "オブジェクト3",
    isLeaf : false, 
    children : []
  },
  {
    objectId : 4,
    objectName : "オブジェクト4",
    isLeaf : true
  },
  {
    objectId : 5,
    objectName : "オブジェクト5",
    isLeaf : false,
    children : []
  },

]

このような配列があった場合に

let updatedObjectList = [
  {
    objectId : 5,
    objectName : "オブジェクト5",
    isLeaf : false,
    children : []
  },
  {
    objectId : 3,
    objectName : "オブジェクト3",
    isLeaf : false,
    children : [
      {
        objectId : 2,
        objectName : "オブジェクト2",
        isLeaf : true
      },
      {
        objectId : 1,
        objectName : "オブジェクト1",
        isLeaf : false,
        children : [
          {
            objectId : 4,
            objectName : "オブジェクト4",
            objectList : [],
            isLeaf : true
          },
        ]
      },
    ]
  }
]

こちらのupdatedObjectListと同じ構造に、objectListをしたいです...。
ただし、objectList = updatedObjectList とするのではなく、
objectListをソートすることで、updatedObjectListと同じ構造にしたいです。

//linq-es2015使用しております
let objectList = this.objectList

this.objectList = []

for(var i = 0; i < updatedObjectList.length; i++){
            this.objectList.unshift(Enumerable.asEnumerable(objectList).Where(x=>x.objectId==updatedObjectList[i].objectId).ToArray()[0])
}

もし、childrenという概念がなく、ただ順番を入れ替えるだけなら上のような形でできるのですが、コードがスマートじゃないし、階層構造をどう表現するのか分からなく、困っております...。
また逆に、階層構造を解除する(childrenに含めれたオブジェクトを外に出す)こともあります。
どのような関数を作ればいいのか...。
教えてくだされば幸いです(>_<)