データの一次元アレイを有する変換データツリー構造

我々はプロジェクトを実行すると、我々は時々階層データツリー表示のツリー構造、または単層配列内のデータの構造を解体するためにデータを返すために必要なデータを必要としています。ここでは、これらの2つの方法をまとめます。

ツリー構造に配列:

データ= VAR [
{ "ID":2、 "名称": "最初のレベル1"、 "PID":0}、
{ "ID":。3、 "名前"、 "第二のレベル1"、 "PID" :2}、
{ "ID" :. 5、 "名前"、 "第3レベル1。"、 "PID" :. 4}、
{ "ID":100、 "名前": "第3レベル2"、 "PID" :3}、
{ "ID":。6、 "名前"、 "第3レベル2"、 "PID" :. 3}、
{ "ID":601、 "名前": "第3レベル2"、 "PID" :6}、
{ "ID":602、 "名前": "第3レベル2"、 "PID" :. 6}、
{ "ID":603、 "名前": "第3レベル2"、 "PID" :} 6
];
ツリー構造に//データアレイ(原則は、IDの値を設定することにより、キーである場合、このデータはサブレベルデータと比較し、このキーも同じ通過その後のpidこと)
関数arrayToJson(treeArray)は{
VaRのR = [];
tmpMap = {} VAR;
(I 0、L = treeArray.length = VAR; I <L、I ++)のために{
OBJのキー値としてデータのそれぞれに対して// IDは、データが目標値に一時的な値として記憶されます内部
tmpMap [treeArray [I] [ "ID"]] = treeArray [I];
}
はconsole.log( 'tmpMap'、tmpMap)
{(; I <L I ++ I 0、L = treeArray.length =)をするための
VARキー= tmpMap [treeArray [I] [ "PID"]];
はconsole.log( 'キー'、KEY)
//各サイクルオブジェクトは、一時的なキー値を持っている場合、PIDデータは、それがプッシュを移動する必要があり、キーの子供に対応するデータがあることを意味し
、これは、データがどのデータに属している子であれば//
IF(キー){
//データがない場合には子供
IF(キー[ "子供"]!){
キー[ "子供"] = [];
キー[ "子供"]プッシュ(treeArray [I]);.
//このデータは、子供を持っている場合
}他{
[キー」子供「]プッシュ(treeArray [I]);.
}
}他{
//これはキー値がない場合には、それが直接最外層に、親を意味しない、データが見つからない属していることを意味し
r.push( treeArray [I]);
}
}
戻りR&LT
}
木構造データ単層アレイデータの形で転送されます。

jsonarr = VAR [{
ID :. 1、
名称: '北京'、
ProSort :. 1、
備考: '市町村'、
PID: ''、
isEdit:falseに、
子供:[{
ID:35、
名称: '朝陽'
PID :. 1、
備考: ''、
isEdit:falseに、
子供:[]
}、{
ID:36
名: '海淀区'、
PID :. 1、
備考: ''、
isEdit:falseに、
子供:[]
}、 {
ID:37、
名称: '房山'、
PID :. 1、
備考: ''、
isEdit:falseに、
子供:[]
}、{
ID:38は、ある
名称: '豊台'、
PID :. 1、
備考: ' 」、
isEdit:falseに、
子供:[]
}]
}、{
ID:2、
名称: '天津'、
ProSort:2、
備考: '市町村'、
PID:」」、
isEdit:falseに、
子供:[{
ID:41である、
名称:「ノーススターエリア」、
PID:2、
発言: ''、
isEdit:falseに、
子供たち:[{
ID:113、
名前: '天津アベニュー'、
ProSort:2、
発言: '道'、
PID: ''、
isEdit:falseに、
子供たち:[ ]}]
}、{
ID:42は、ある
名称: '河北区'、
PID:2、
備考: ''、
isEdit:falseに、
子供:[]
}、{
ID:43は、ある
名称: 'Xiqing'、
PID :2、
発言: ''、
isEdit:偽、
子供:[]
}]
}、{
ID :. 3、
名称: '河北'、
ProSort :. 5、
備考: 'カテゴリー'、
PID: ''、
isEdit:falseに、
子供:[{
ID:45、
名称: '衡水'
PID :. 3、
備考:' '
isEdit:falseに、
子供:[]
}、{
ID:46であり、
名称:'張家口'
PID :. 3、
備考:'」、
isEdit:Falseに、
子供: []
}]
}]
@単一転写の配列の形でツリーデータ構造
関数jsonToArray(ノード){
VARのR&LT = [];
IF(Array.isArray(ノード)){
(VARのためにI 0、L =ノードは=。長さ; I <L、I ++){
r.push(ノード[I]); //データの各項目に新しい配列を得ます
(Array.isArray(ノード[I] [ "子供"])&&ノード[I] [ "子供"]。長さ> 0)IF
//再帰呼び出しが新しい配列に子供、スプライシングされたデータが存在する、および削除子供
R&LT r.concat =(jsonToArray(ノード[I] [ "子供"]));
削除ノード[I] [ "子"]
}
}
戻りR&LT;
}
元のデータを破壊しないために、我々は、実行されるデータ操作を必要とします深いコピー:

//ディープコピー
機能deepCopy(OBJ){
VARオブジェクト;
//配列深みをコピー
IF(Object.prototype.toString.call(OBJ)== "[配列オブジェクト]"){
オブジェクト= [];
のための(VAR = I 0; I <obj.length; I ++){
object.push(deepCopy(OBJ [I]))
}
リターンオブジェクト
}
//目標深さをコピーする
場合(Object.prototype.toString.call(OBJ)== " [対象オブジェクト]「){
オブジェクト= {};
PのOBJで(VAR)のために{
オブジェクト[P] = OBJ [P]
}
リターンオブジェクト
}
}
コールと二つの方法のバリデーション:

CopyData deepCopy = VAR(jsonarr)
VAR BB = jsonToArray(のCopyData)
はconsole.log( 'スイッチアレイJSON'、BB)
VAR arrayToJson AA =(データ)
はconsole.log( '配列ツリーへ'、AA)
 
--- -------------
免責事項:この記事はCSDNブロガーが「CC 4.0 BY-SAの著作権契約書に従って、過去のオリジナル記事の少年青い深さで、再現、オリジナルのソースと、このリンクを添付してください声明。
オリジナルリンクします。https://blog.csdn.net/qq_39009348/article/details/87365547

おすすめ

転載: www.cnblogs.com/vicky-li/p/11909762.html
おすすめ