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

回答編集履歴

2

修正

2019/01/16 06:37

投稿

papinianus
papinianus

スコア12705

answer CHANGED
@@ -12,4 +12,21 @@
12
12
 
13
13
  const a = [1,2,5,10];
14
14
  const b = mapping(a, double);
15
- ```
15
+ ```
16
+
17
+ ---
18
+ もっと手前のはなしをしたほうがいいのかと思うのでポエムをかきます
19
+
20
+ エクセルは使ったことありますか?なければgoogleスプレッドシートはありますか(こちら無料なので使ってみてください)?
21
+
22
+ |A|B|C|D|
23
+ |:--|:--:|--:|:--|
24
+ |1|2|5|10|
25
+ |=A1*2|=B1*2|=C1*2|=D1*2|
26
+
27
+ こういうのを想像してください(エクセルになじみがなかったら↑のとおり入れてください)
28
+ A2:D2にかいてるのは`function(a) { return a * 2; }`みたいなやつです。
29
+ mapによるいわゆる*射影/写像*という処理は、1行目の配列を2行目の状態にするものです。
30
+ jsでmapがcallback(関数の実体)をもらうというのは、excelみたいに、意味的に同じことを何回も入力(コピペ)しなくても、要素に順に適用していってくれるということです。
31
+ なので、「何にリターンしているか」という当初の質問については、やや不正確ですが、mapで得る結果配列のなかで、処理する対象となる要素のindex番目と同じ(配列上の)位置にリターンしている、という感じですかね(イメージ先行の説明をしています)
32
+ →上の例だとB2の関数は、B2セルにリターンしています。

1

arrowやめ

2019/01/16 06:37

投稿

papinianus
papinianus

スコア12705

answer CHANGED
@@ -1,14 +1,14 @@
1
1
  最初のコード例を、リターンが分かりそうな感じに書きかえてみました。
2
2
 
3
3
  ```javascript
4
- const mapping = (ar, func) => {
4
+ const mapping = function(ar, func) {
5
5
  let ret = [];
6
6
  for(let i = 0; i < ar.length ; i++) {
7
7
  ret.push(func(ar[i])); // ここで受けてる
8
8
  }
9
9
  return ret;
10
10
  }
11
- const double = a => a * 2; //ここでのリターンを↑
11
+ const double = function( a) {return a * 2;} //ここでのリターンを↑
12
12
 
13
13
  const a = [1,2,5,10];
14
14
  const b = mapping(a, double);