teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

試したコード、わからない点を追記

2017/12/09 06:42

投稿

kde
kde

スコア29

title CHANGED
File without changes
body CHANGED
@@ -38,7 +38,7 @@
38
38
  "2101": { "name": '', "child": {
39
39
  "10210101": { "name": '', "child": {}}
40
40
  }},
41
- "1002": { "name": '', "child": {}}
41
+ "2102": { "name": '', "child": {}}
42
42
  }}
43
43
  }}
44
44
  };
@@ -54,4 +54,78 @@
54
54
  ```
55
55
 
56
56
  ###補足情報
57
- ES5でもES2015でも問題ありません。
57
+ ES5でもES2015でも問題ありません。
58
+
59
+ ### 試したコード
60
+ 下記が途中まで試してみたコードです。
61
+ とりあえずどうにか取れるのを確認できればと思って実装しました。
62
+ 第一階層の直下配下に属するものであれば問題ないのですが、その他だと上手く取れていないようです。
63
+
64
+ **<考えていたロジック>**
65
+ - パースしたidを配列に入れていく
66
+ - パースしていく中で指定のidとマッチしたらループ終了
67
+ - childプロパティが空だったら(= 指定のIDに当たらなければ)配列を空にして次のループを実行する
68
+
69
+ **<分からないこと>**
70
+ - ロジックが誤っていると思うが、どういったロジックが良いかわからない。考え中。
71
+ - ループの途中で何かしら処理を加える必要があると思うが、ロジックが定まっていないためどのような処理を加えればいいか分からない
72
+
73
+ ```javascript
74
+ console.log(getPropPath('1001')); // => ["1", "10", "1001"] OK
75
+ console.log(getPropPath('100106')); // => ["100106"] NG
76
+ console.log(getPropPath('100201')); // => ["1002", "100201"] NG
77
+ console.log(getPropPath('1003')); // => ["1003"] NG
78
+ console.log(getPropPath('10210101')); // => ["2", "21", "2101", "10210101"] OK
79
+
80
+ function getPropPath(id) {
81
+ var result = [];
82
+
83
+ HOGE:
84
+ for (var key in obj) {
85
+ result.push(key);
86
+ if (key === id) { break HOGE; }
87
+ if (Object.keys(obj[key].child).length === 0) {
88
+ result.length = 0;
89
+ continue;
90
+ }
91
+ var obj1 = obj[key].child;
92
+ for (var key in obj1) {
93
+ result.push(key);
94
+ if (key === id) { break HOGE; }
95
+ if (Object.keys(obj1[key].child).length === 0) {
96
+ result.length = 0;
97
+ continue;
98
+ }
99
+ var obj2 = obj1[key].child;
100
+ for (var key in obj2) {
101
+ result.push(key);
102
+ if (key === id) { break HOGE; }
103
+ if (Object.keys(obj2[key].child).length === 0) {
104
+ result.length = 0;
105
+ continue;
106
+ }
107
+ var obj3 = obj2[key].child;
108
+ for (var key in obj3) {
109
+ result.push(key);
110
+ if (key === id) { break HOGE; }
111
+ if (Object.keys(obj3[key].child).length === 0) {
112
+ result.length = 0;
113
+ continue;
114
+ }
115
+ var obj4 = obj3[key].child;
116
+ for (var key in obj4) {
117
+ result.push(key);
118
+ if (key === id) { break HOGE; }
119
+ if (Object.keys(obj4[key].child).length === 0) {
120
+ result.length = 0;
121
+ continue;
122
+ }
123
+ }
124
+ }
125
+ }
126
+ }
127
+ }
128
+
129
+ return result;
130
+ }
131
+ ```