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

回答編集履歴

3

追記

2020/05/13 18:44

投稿

hoshi-takanori
hoshi-takanori

スコア7903

answer CHANGED
@@ -56,6 +56,15 @@
56
56
 
57
57
  はい。`a['type']` という書き方は、オブジェクトのプロパティにアクセスするためのもので、式を書ける場所ならどこにでも書くことができます。
58
58
 
59
+ ```js
60
+ const obj = { type: 'keyword', searchValue: ['JavaScript', 'React.js'] };
61
+ console.log(obj['type']); // keyword と表示される
62
+ console.log(obj['type'] === 'keyword'); // true と表示される
63
+ if (obj['type'] === 'keyword') {
64
+ console.log('obj はキーワードです'); // 表示される
65
+ }
66
+ ```
67
+
59
68
  また、`a['type']` は実は `a.type` とも書くことができます。(というか、その方が普通ですね。)
60
69
  'type' の部分にスペースや - などの記号が含まれていたり、'type' の部分を変数にしたい場合は、`a.param-type` や `a.変数` とは書けないので、`a['param-type']` や `a[変数]` と書くことになります。
61
70
  逆に、`props.params` の代わりに `props['params']` と書くこともできます。

2

追記

2020/05/13 18:44

投稿

hoshi-takanori
hoshi-takanori

スコア7903

answer CHANGED
@@ -76,6 +76,8 @@
76
76
 
77
77
  この `(a) => { return a['type'] === 'keyword'}` はアロー関数というもので、もっと短く `a => a.type === 'keyword'` と書くこともできます。
78
78
 
79
+ 参考: [JavaScript アロー関数のサンプル | ITSakura](https://itsakura.com/js-arrow)
80
+
79
81
  JavaScript の関数の書き方は 3 通りあって、基本的にどれも同じ結果になります。
80
82
  (厳密には、アロー関数は this の扱いが異なりますが、ここでは結果に影響しないので…。)
81
83
 

1

追記

2020/05/13 18:33

投稿

hoshi-takanori
hoshi-takanori

スコア7903

answer CHANGED
@@ -46,4 +46,86 @@
46
46
  ],
47
47
  <Chip key='chip-1' label=`keyword: Teratail' onDelete={props.onChipDelete('keyword', 'Teratail')} color="primary" />
48
48
  ]
49
+ ```
50
+
51
+ ---
52
+
53
+ > > 配列 props.params から条件 ['keyword'].includes(a['type']) に合うものを抜き出しています。
54
+ >
55
+ > ・こちらについてなのですが、`a['type’]`が渡された配列における”[]”内で渡されたkeyの値を表す。という書き方は、filter関数のみの書き方ではなく、それ以外でも同じ書き方をするのでしょうか?
56
+
57
+ はい。`a['type']` という書き方は、オブジェクトのプロパティにアクセスするためのもので、式を書ける場所ならどこにでも書くことができます。
58
+
59
+ また、`a['type']` は実は `a.type` とも書くことができます。(というか、その方が普通ですね。)
60
+ 'type' の部分にスペースや - などの記号が含まれていたり、'type' の部分を変数にしたい場合は、`a.param-type` や `a.変数` とは書けないので、`a['param-type']` や `a[変数]` と書くことになります。
61
+ 逆に、`props.params` の代わりに `props['params']` と書くこともできます。
62
+
63
+ 参考: [【JavaScript】プロパティへのアクセス - Qiita](https://qiita.com/tomcky/items/0757348473873765432e)
64
+
65
+ > また、
66
+ > > props.params.filter((a) => { return (['keyword'].includes(a['type'])) })
67
+ >
68
+ > は
69
+ >
70
+ > > props.params.filter((a) => { return a['type'] === 'keyword'})
71
+ >
72
+ > という風にも書き換える事ができ、
73
+ > ・returnを含む括弧内がtrueとなる要素の配列を新たに作る、という理解であっていますでしょうか、、?
74
+
75
+ はい。`配列.filter(真偽値を返す関数)` と書くと、配列の各要素に対して真偽値を返す関数が呼び出され、true を返した要素だけを集めた新しい配列が作られます。
76
+
77
+ この `(a) => { return a['type'] === 'keyword'}` はアロー関数というもので、もっと短く `a => a.type === 'keyword'` と書くこともできます。
78
+
79
+ JavaScript の関数の書き方は 3 通りあって、基本的にどれも同じ結果になります。
80
+ (厳密には、アロー関数は this の扱いが異なりますが、ここでは結果に影響しないので…。)
81
+
82
+ 1) function キーワードを使った名前付き関数
83
+
84
+ ```js
85
+ // 名前付き関数の定義は文なので、関数定義と、その使用は分けて書く必要がある。
86
+ function isKeyword(a) {
87
+ return a.type === 'keyword';
88
+ }
89
+ props.params.filter(isKeyword)
90
+ ```
91
+
92
+ 2) function キーワードを使って無名関数
93
+
94
+ ```js
95
+ // 無名関数は式なので、関数定義と、その使用は分けて書くこともできるし、
96
+ const isKeyword = function (a) {
97
+ return a.type === 'keyword';
98
+ };
99
+ props.params.filter(isKeyword)
100
+
101
+ // または、次のようにまとめて書くこともできる。
102
+ props.params.filter(function (a) {
103
+ return a.type === 'keyword';
104
+ })
105
+ ```
106
+
107
+ 3) アロー関数
108
+
109
+ ```js
110
+ // アロー関数も式なので、関数定義と、その使用は分けて書くこともできるし、
111
+ const isKeyword = (a) => {
112
+ return a.type === 'keyword';
113
+ };
114
+ props.params.filter(isKeyword)
115
+
116
+ // または、次のようにまとめて書くこともできる。
117
+ props.params.filter((a) => {
118
+ return a.type === 'keyword';
119
+ })
120
+
121
+ // さらに、return を省略することも可能。
122
+ props.params.filter(a => a.type === 'keyword')
123
+ ```
124
+
125
+ また、どの方法で作った関数も、filter や map などに渡すだけでなく、普通に呼び出すことができます。
126
+
127
+ ```js
128
+ const isKeyword = a => a.type === 'keyword';
129
+ const obj = { type: 'keyword', searchValue: ['JavaScript', 'React.js'] };
130
+ console.log(isKeyword(obj)); // true と表示される
49
131
  ```