どのように地獄私はマップを使用しますか?


これは私の個人的なブログからの投稿ですHere
彼らは一日かそこらでそこで発表される.どのように空想.
私はよく学生たちにアレイ関数を使うよう励ますmap , reduce , and filter しかし、彼らはめったに彼らと快適な感じがします.そして、彼らがマウントされた懐中電灯でスイス軍ナイフのようであるので、それは本当に恥です.これらの3つの関数は、おそらくあなたの最も混乱したバギーコードの数千行を削除することができます.バンチのオールスターから始めましょうmap .
地図は興味深いタイプの機能であり、誰かがあなたが知っているJavaScriptを剥がして、いくつかの古代の外国人技術を公開するのが大好きであるように、それは最初に非常に奇妙に見えます.
array.map(x => x * 5) // What r u even Doing tho!!!!
ベースラインを達成するためにコードのこの行を壊しましょう.
最初に矢印関数を指摘したいと思いますx => x * 5 (もし矢印関数が何を読んでいるのかをよく知らなければBlog Post! ここではうまく説明してくれます)
そこでやっている機能は何ですか?これはコールバックですか?まあ…のソート.しかし、コールバックとしてそれを考えるのは、関数が渡された引数と*引数であり、別の関数が実行を決定します.だからいくつかの方法では、コールバックのようです.しかし、それはコールバックではなく、代わりに、別の日のためのブログ記事である* * *高機能関数*と呼ばれます.
承知しましたmap 引数として関数を受け取ります.でもどうして?それはどうしますか.
さて、マップは配列の上で繰り返します.配列の各項目を1つずつ受け取り、指定した関数に渡します.
それで、あなたがこれを見るならば
const scores = [90, 80, 25, 50]

const doubleScores = sores.map(x => x * 2)
その後、あなたはdoubleScores 各項目のスコアを取ることによって計算され、それを実行してx => x * 2 . それで、それは我々を残しますか?
さて、私たちは4つの結果を格納する必要があるので、それはあまりにも右の配列である必要があります.だから私たちは知っているdoubleScores が配列になります.そして、それはいくつかの他の配列内容を倍増する結果で満たされる配列です.
// A way to visualize what map is doing
cosnt scores = [90, 80, 25, 50]
const double = x => x * 2
const doubleScores = [ double(scores[0]),
                       double(scores[1]),
                       double(scores[2]),
                       double(scores[3]) ]
ので、地図は何ですか?
さて、それを説明する1つの方法は、単一の項目を引数として期待する関数を取ることができることです.この関数を多くの項目の配列で使用します.……ポケットのようだfor loop すべての配列がちょうどそれを持ち歩いていること.
これは実際にはかなりドープされているので、ループを書く代わりに、単一の項目で動作するために使用される単純な関数を書くことができます.これは本当に素晴らしいfor loops コードの実際の意図が何であるかをマスクすることができるcruftとboilerplateがあります.次のコードを考えます.
const students = [ { name: 'Leroy Jenkins' grade: 55 },
                   { name: 'Tommy Pickles' grade: 98 },
                   { name: 'Mike Tyson' grade: 85 },
                   { name: 'Donnie Darko' grade: 90 } ]

// A simple function expecting a single student, and returns true if they pass the class and fail otherwise.
const isPassing = (student) => student.grade >= 65 ? true : false

// Usage with a single student
const tommyPickles = students[1]
const didTommyPass = isPassing(tommyPickles)

// Usage with the entire list
const classResults = students.map(isPassing)

// Extra credit c-c-combo usage with filter
const onlyWinners = students.filter(isPassing) // more on this next week.
どのように滑らかですか?forループの真ん中でその関数を使おうとするのは想像できますか?それは混乱のように見えます、代わりに、それは美しい1行宣言のようです.地図は超大国を与える!
そして、私がそれがポケットのように言うときfor loop 文字通り任意の意味for loop マップを使用して書き直されることができます、そして、それは通常非常により簡単になります.例えば、最初のforループのように見える
const scores = [90, 80, 25, 50]
const doubleScores = []
for (var i = 0; i < scores.length; i++) {
  doubleScores.push(scores[i] * 2)
}
EWW WTF . Noマップマップを戻すconst doubleScores = sores.map(x => x * 2)ohhhhはい.より良い.
違いを見なさい?マップのバージョンは、1つの行にフィットし、はるかに少ないcruftを持っており、あなたはとてもクールに見えるようになります.OKたぶん最後の部分は真実ではない.あなたの周りの方法を知っている場合はループのために書く必要はめったにありませんmap . 私は実際に長いループのために書かれていないので、私はあなたが上記のものを書くときMDNをダブルチェックしなければならなかった.私は正直に言っています.