filter
はブール値を返しません。元の配列の要素を含む配列を返します。配列の各要素に指定した関数を呼び出すことによって、結果にどの要素を含めるかを決定します。この関数はブール値を返します。真実であれば、その要素は結果に含まれます。関数への引数は、要素(関数内ではitem
と呼ばれます)と配列内の位置(pos
と呼ばれます)です。
この関数は、indexOf()
を使用して、指定された要素と同じ値を持つ配列の最初の要素の位置を検索します。その位置が与えられた位置と同じ場合、この要素は配列内のその値の最初のオカレンスでなければならないので、true
を返し、その要素が結果に含まれます。位置が異なる場合、この要素は後で複製する必要があるため、false
を返し、その要素は結果に含まれません。これの最終的な結果は、各値の最初のコピーだけがフィルタリングの結果に含まれていることです。つまり、すべてが一意です。例えば
、アレイがあると仮定:最初の反復で
["a", "b", "a", "c"]
、item = "a"
とpos = 0
。 a.indexOf(item)
は0
を返し、関数はtrue
である0 == 0
を返します。したがって、item
が結果に含まれます。
2回目の反復では、item = "b"
とpos = 1
です。 a.indexOf(item)
は1
を返し、関数はを返します。これはtrue
です。したがってitem
が結果に含まれます。
3回目の反復では、item == "a"
とpos = 2
です。 a.indexOf(item)
は0
を返し、関数はfalse
である0 == 2
を返します。したがって、item
はではありません。が結果に含まれます。
第4の反復では、item = "c"
とpos = 3
です。 a.indexOf(item)
が3
を返し、関数がtrue
である3 == 3
を返すため、item
が結果に含まれます。
最後の結果は、1番目、2番目、4番目の反復の項目が結果に含まれていることです。これは["a", "b", "c"]
です。
'filter'関数のドキュメントを読んだことがありますか? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filterここでは、コールバック関数の引数について説明します。 – Barmar
フィルタはブール値を返しません。フィルタ処理された配列を返します。コールバックが 'true'を返す場合、itemは結果に含まれ、falseならfalseになります。この場合、述語は - 項目の現在のインデックス( 'pos')を行い、配列内の項目のインデックスと同じです。そうでない場合、アイテムは重複しており、除外されます。 [Array#filter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)について少しお読みください。 –