forEach()($.each())は、配列或いは連想配列の値を処理し、map($.map())は、値を加工しますが、
この加工と処理の違いとは何なのでしょうか。加工なら、単純に与えられた値を加算したり除算したりし、
処理なら、値を利用した何かしらの仕組みを作るという認識であっておりますか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
「処理」も「加工」も同じような意味ですね。each
を「処理」、map
を「加工」と表現したのは初めて見ました。誰かが適当に書いた日本語に捕らわれないで、each
とmap
のそれぞれの動作をちゃんと理解した方が良いと思います。
投稿2016/03/15 13:28
総合スコア84507
0
ベストアンサー
jQueryのみならず、これらの操作はプログラミング言語の間で Optional とともに語られます。Optional の界隈において、
「加工」は
入力データに"対して"何らかの処理を施し、"出力データを伴う"ものです。
「処理」は
入力データを"元に"何らかの処理を行いますが"出力データを伴いません"。
これは map や each と言った操作を説明する上で、中間操作か終端操作かの違いを意味しています。この観点でいえば質問者の理解は正しいと言えます。
投稿2016/03/15 14:55
編集2016/03/15 17:20総合スコア86
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
forEachは主に副作用を期待するメソッドであり、mapは副作用なく書けるメソッドである、という風に理解するといいと思います。
javascript
1var arr=[1,2,3]; 2arr.map(function(e){return e*2}); 3//[2,4,6]が返る 4arr.forEach(function(e){return e*2}); 5//undefinedが返る。他の変数に依存しないと結果を返せない。 6var arr2 = []; 7arr.forEach(function(e,i){arr2[i] = e*2}); 8//undefinedが返るが…… 9arr2: 10//arr2は[2,4,6]になる 11//しかし外部に依存しているので、こんなこともあり得る。 12[10,20].forEach(function(e,i){arr2[i] = e*2}); 13arr2; 14//[10,20]ではなく[10,20,6]
投稿2016/03/16 00:47
総合スコア36074
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
map : e-words
とある配列の中身を機械的に加工することをmapといいます。
大きな機械(ハンコ)でたい焼きやおまんじゅうのような製品を一度で大量に作る事を指すようです。
基本的に以下が保証されます。
- inputとoutputの配列の要素数が同じ数であること
- input→outputの加工の結果、勝手にIndexが書き換わらないこと
- 全ての要素は同じ処理(関数)で同様に加工されること
JavaScript
1var users = [ 2 {id: 1, name: "aaaaaaaa", score: 72}, 3 {id: 2, name: "miyabi", score: 38}, 4 {id: 3, name: "abe_nana", score: 17} 5]; 6 7var user_names = users.map(function(it){ 8 return it.name; 9}); 10console.log(user_names); 11// ["aaaaaaaa", "miyabi", "abe_nana"]
eachは戻ってくる結果が必要ない場合に使います。
JavaScript
1var users = [ 2 {id: 1, name: "aaaaaaaa", score: 72}, 3 {id: 2, name: "miyabi", score: 38}, 4 {id: 3, name: "abe_nana", score: 17} 5]; 6 7var user_names = users.forEach(function(it){ 8 return it.name; 9}); 10console.log(user_names); 11// undefined
要らないので戻り値は捨てられてundefinedになってることがわかります。
下記のようにAjaxやDOMに影響を与える箇所に投げて終わり…という箇所で使いましょう。
JavaScript
1var users = [ 2 {id: 1, name: "aaaaaaaa", score: 72}, 3 {id: 2, name: "miyabi", score: 38}, 4 {id: 3, name: "abe_nana", score: 17} 5]; 6 7users.forEach(function(it){ 8 var $user = $("<tr></tr>") 9 .append("<td>" + it.id + "</td>") 10 .append("<td>" + it.name + "</td>") 11 .append("<td>" + it.score + "</td>"); 12 $("table.users").append($user); 13});
出来ること自体は完全にmapの劣化ですが、
他のエンジニアとの共同開発の場合に、
処理に着目したmapを使うと他のエンジニアさんが混乱するので是非使い分けて下さい。
投稿2016/03/16 02:50
総合スコア21158
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。