numbers = [1,2,3,4,5,4,3,2,1];
var filterResult = numbers.filter(function(i){
return (i > 2);
});
これがどのように機能するかわかりません。関数の引数として i を省略すると、関数が壊れますが、i は何にも関連付けられていないのに、なぜそこにある必要があるのでしょうか?
numbers = [1,2,3,4,5,4,3,2,1];
var filterResult = numbers.filter(function(i){
return (i > 2);
});
これがどのように機能するかわかりません。関数の引数として i を省略すると、関数が壊れますが、i は何にも関連付けられていないのに、なぜそこにある必要があるのでしょうか?
.filter
( Array.prototype.filter
) は、指定された関数を 3 つの引数で呼び出します。
function(element, index, array) {
...
element
呼び出しの特定の配列要素です。index
要素の現在のインデックスですarray
フィルタリングされる配列です。引数の一部またはすべてを使用できます。
あなたの場合、i
を参照し、element
関数の本体で使用されます。
function(i){
return (i > 2);
}
つまり、 「が 2 より大きい要素をフィルタするelement
」ということです。
i は、そのクロージャー内にある場合、セット内の現在のオブジェクトへの参照です。単なる変数であるため、任意の名前を付けることができますが、クロージャ内で同じ名前にする必要があります。使用する代わりに、設計されたfunction(){}
方法であるコールバックを使用できます。filter
参照は の定義によって暗黙的に行われます。詳細については、http .filter
: //msdn.microsoft.com/en-us/library/ff679973 (v=vs.94).aspx を参照してください。
はi
実際には非常に重要です。これは、フィルター関数が作用している要素に関する情報をフィルター関数に提供します。実はここで使われています(i > 2)
。
これにより、値が 2 より大きい要素が保持されます。
これi
は、に提供する関数の仮パラメータ.filter()
です。挿入しないと、関数には渡された引数を参照する方法¹がありません(i
関数本体の内部では、定義されていない可能性のある他のエンティティを参照します-window.i
典型的です)。
¹ それは技術的には嘘ですが、この議論の目的上は真実であると考えてください
確かに古いスレッドですが、言われていないことを埋めているだけです。
括弧は、プログラマーが特定のプログラムにとって意味のある変数名を挿入するためにあります。
「i」を選択すると、他のほとんどの (初心者) プログラマーは「ああ、私はインデックスを意味する」と考えるかもしれません。どちらが間違っているでしょう。
引数を 3 つではなく 1 つ使用する場合は、要素を表すために「el」を選択します。配列にソーダのフレーバーが含まれている場合は、「flavor」を選択します。