配列内のツリー構造を別の配列と合わせたい
この質問はほぼマルチポストです。元の質問はこちらです。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に含めれたオブジェクトを外に出す)こともあります。
どのような関数を作ればいいのか...。
教えてくだされば幸いです(>_<)