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

質問編集履歴

1

簡略化

2019/09/29 03:28

投稿

kuroean
kuroean

スコア12

title CHANGED
File without changes
body CHANGED
@@ -1,124 +1,6 @@
1
1
  jQueryでオブジェクトの操作を調べていると、同じことができるけど別の方法というのがたくさんあると思います。
2
2
 
3
- そんな中で`grep()`と`find()`について教えて頂ければと思いご質問いたしました。
4
-
5
- こちらのjsfiddleのコードになります。
6
- [https://jsfiddle.net/r03oewp8/](https://jsfiddle.net/r03oewp8/)
7
- (同じコードを質問の最後にも記載させて頂いてますので、見やすい方でご覧くださいませ。)
8
-
9
- ###質問1
10
- 使う関数についての質問です。
11
-
12
3
  下記はどちらがいいでしょうか?
13
4
 
14
- 56行目の「`grep()`を使う方法」→ 現状はこれです
5
+ ・`grep()`を使う方法
15
- 63行目の「`find()`を使う方法」→ コメントアウト中です
6
+ ・`find()`を使う方法
16
-
17
- ###質問2
18
- 引数の必要性についての質問です
19
-
20
- 現状は`get_extractObj()`の引数に`parentId`と`parentType`という親情報を渡して、そこから`parentObj`という親オブジェクトを取得し、その中から改めて`extractObj`という目的のオブジェクトを抽出する流れですが、
21
-
22
- ・親情報を渡さなくても`extractObj`を抽出する方法はあるか?
23
- ・親情報を渡さなくても可能ならその方が良いのか?
24
- ・親情報を渡した方が抽出の速度が速いのか?
25
-
26
- なども知りたいと思います。
27
-
28
- どなたかお詳しい方がいらっしゃいましたら、どうぞ宜しくお願い致します。
29
-
30
- ###jsfiddleのコード
31
- 以下は冒頭のjsfiddleのコードになります。
32
- ```
33
- /*
34
- * 対象のオブジェクトを取得
35
- ***************************************************/
36
- function getObj(){
37
- var obj = {
38
- "obj":
39
- {
40
- "library":
41
- [
42
- {"area":"library","post_type":"media","media_id":"10"},
43
- {"area":"library","post_type":"comment","comment_id":"100"}
44
- ],
45
- "timeline":
46
- [
47
- {"area":"timeline","post_type":"comment","comment_id":"100"},
48
- {"area":"timeline","post_type":"comment","comment_id":"200",
49
- "attached":
50
- {
51
- "media":[
52
- {"area":"timeline","post_type":"media","media_id":"10"}
53
- ]
54
- }
55
- },
56
- {"area":"timeline","post_type":"comment","comment_id":"300",
57
- "attached":
58
- {
59
- "media":[
60
- {"area":"timeline","post_type":"media","media_id":"10"},
61
- {"area":"timeline","post_type":"media","media_id":"20"}
62
- ]
63
- }
64
- }
65
- ]
66
- }
67
- }
68
- return obj;
69
- }
70
-
71
- /*
72
- * target_objから、target_idのオブジェクトを抽出
73
- ***************************************************/
74
- function get_extractObj( targetObj, area, targetType, targetId, parentType=null, parentId=null ){
75
-
76
- let extractObj;
77
-
78
- const areaObj = targetObj['obj'][area];
79
-
80
- // 一番上の階層について、targetIdのオブジェクトを抽出
81
- if( parentType==null ){
82
- extractObj = areaObj.find( e=>e[targetType+'_id'] && e[targetType+'_id'] === targetId );
83
- }
84
-
85
- // それ以下の階層について、parentIdのオブジェクトのattachedから、targetIdのオブジェクトを抽出
86
- if( parentType!=null ){
87
-
88
- /* grep() を使う方法 */
89
- const parentObj = $.grep(areaObj, function (e) { return e[parentType+'_id'] == parentId; });
90
- const attachedObj = parentObj[0]['attached'][targetType];
91
- extractObj = $.grep(attachedObj, function (e) { return e[targetType+'_id'] == targetId; });
92
- extractObj = extractObj[0];
93
- /* ここまで */
94
-
95
- /* find() を使う方法 */
96
- //const parentObj = areaObj.find( e=>e[parentType+'_id'] && e[parentType+'_id'] === parentId );
97
- //extractObj = parentObj['attached'][targetType].find( e=>e[targetType+'_id'] && e[targetType+'_id'] === targetId );
98
- /* ここまで */
99
-
100
- }
101
-
102
- // 抽出結果
103
- return extractObj;
104
- }
105
-
106
-
107
- /*
108
- * 実行
109
- ***************************************************/
110
- var result1 = get_extractObj( getObj(), 'library', 'media', '10' );
111
- console.log('result1:',result1);
112
-
113
- var result2 = get_extractObj( getObj(), 'library', 'comment', '100' );
114
- console.log('result2:',result2);
115
-
116
- var result3 = get_extractObj( getObj(), 'timeline', 'media', '10', 'comment', '200' );
117
- console.log('result3:',result3);
118
-
119
-
120
-
121
-
122
-
123
-
124
- ```