質問編集履歴

1

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

2017/12/09 06:42

投稿

kde
kde

スコア29

test CHANGED
File without changes
test CHANGED
@@ -78,7 +78,7 @@
78
78
 
79
79
  }},
80
80
 
81
- "1002": { "name": '', "child": {}}
81
+ "2102": { "name": '', "child": {}}
82
82
 
83
83
  }}
84
84
 
@@ -111,3 +111,151 @@
111
111
  ###補足情報
112
112
 
113
113
  ES5でもES2015でも問題ありません。
114
+
115
+
116
+
117
+ ### 試したコード
118
+
119
+ 下記が途中まで試してみたコードです。
120
+
121
+ とりあえずどうにか取れるのを確認できればと思って実装しました。
122
+
123
+ 第一階層の直下配下に属するものであれば問題ないのですが、その他だと上手く取れていないようです。
124
+
125
+
126
+
127
+ **<考えていたロジック>**
128
+
129
+ - パースしたidを配列に入れていく
130
+
131
+ - パースしていく中で指定のidとマッチしたらループ終了
132
+
133
+ - childプロパティが空だったら(= 指定のIDに当たらなければ)配列を空にして次のループを実行する
134
+
135
+
136
+
137
+ **<分からないこと>**
138
+
139
+ - ロジックが誤っていると思うが、どういったロジックが良いかわからない。考え中。
140
+
141
+ - ループの途中で何かしら処理を加える必要があると思うが、ロジックが定まっていないためどのような処理を加えればいいか分からない
142
+
143
+
144
+
145
+ ```javascript
146
+
147
+ console.log(getPropPath('1001')); // => ["1", "10", "1001"] OK
148
+
149
+ console.log(getPropPath('100106')); // => ["100106"] NG
150
+
151
+ console.log(getPropPath('100201')); // => ["1002", "100201"] NG
152
+
153
+ console.log(getPropPath('1003')); // => ["1003"] NG
154
+
155
+ console.log(getPropPath('10210101')); // => ["2", "21", "2101", "10210101"] OK
156
+
157
+
158
+
159
+ function getPropPath(id) {
160
+
161
+ var result = [];
162
+
163
+
164
+
165
+ HOGE:
166
+
167
+ for (var key in obj) {
168
+
169
+ result.push(key);
170
+
171
+ if (key === id) { break HOGE; }
172
+
173
+ if (Object.keys(obj[key].child).length === 0) {
174
+
175
+ result.length = 0;
176
+
177
+ continue;
178
+
179
+ }
180
+
181
+ var obj1 = obj[key].child;
182
+
183
+ for (var key in obj1) {
184
+
185
+ result.push(key);
186
+
187
+ if (key === id) { break HOGE; }
188
+
189
+ if (Object.keys(obj1[key].child).length === 0) {
190
+
191
+ result.length = 0;
192
+
193
+ continue;
194
+
195
+ }
196
+
197
+ var obj2 = obj1[key].child;
198
+
199
+ for (var key in obj2) {
200
+
201
+ result.push(key);
202
+
203
+ if (key === id) { break HOGE; }
204
+
205
+ if (Object.keys(obj2[key].child).length === 0) {
206
+
207
+ result.length = 0;
208
+
209
+ continue;
210
+
211
+ }
212
+
213
+ var obj3 = obj2[key].child;
214
+
215
+ for (var key in obj3) {
216
+
217
+ result.push(key);
218
+
219
+ if (key === id) { break HOGE; }
220
+
221
+ if (Object.keys(obj3[key].child).length === 0) {
222
+
223
+ result.length = 0;
224
+
225
+ continue;
226
+
227
+ }
228
+
229
+ var obj4 = obj3[key].child;
230
+
231
+ for (var key in obj4) {
232
+
233
+ result.push(key);
234
+
235
+ if (key === id) { break HOGE; }
236
+
237
+ if (Object.keys(obj4[key].child).length === 0) {
238
+
239
+ result.length = 0;
240
+
241
+ continue;
242
+
243
+ }
244
+
245
+ }
246
+
247
+ }
248
+
249
+ }
250
+
251
+ }
252
+
253
+ }
254
+
255
+
256
+
257
+ return result;
258
+
259
+ }
260
+
261
+ ```