[]
配列です。
この配列はまったく使用されません。
配列を使用すると、 などの配列プロトタイプにアクセスできるため、ページに配置されています.forEach
。
これは、入力するよりも高速ですArray.prototype.forEach.call(...);
次に、forEach
関数を入力とする関数です...
[1,2,3].forEach(function (num) { console.log(num); });
...そしてthis
(this
は配列のようなもので、 があり、 のようにlength
その部分にアクセスできますthis[1]
) の各要素に対して、次の 3 つのものを渡します。
- 配列内の要素
- 要素のインデックス (3 番目の要素は を渡します
2
)
- 配列への参照
最後に、.call
関数が持つプロトタイプです (他の関数から呼び出される関数です)。
.call
最初の引数を取りthis
、通常の関数内をcall
最初の引数として渡したものに置き換えます(undefined
または日常のJSでnull
使用するwindow
か、「厳密モード」の場合は渡したものになります)。残りの引数は元の関数に渡されます。
[1, 2, 3].forEach.call(["a", "b", "c"], function (item, i, arr) {
console.log(i + ": " + item);
});
// 0: "a"
// 1: "b"
// 2: "c"
したがって、関数を呼び出す簡単な方法を作成し、空の配列からすべてのタグのリストにforEach
変更し、順序どおりに、提供された関数を呼び出しています。this
<a>
<a>
編集
論理的結論 / クリーンアップ
以下に、関数型プログラミングの試みを破棄し、毎回手動のインライン ループに固執することを提案する記事へのリンクがあります。
.forEach
、 、 、 、 、 、 、 、 、 、 、 、 、 のいずれかにアクセスしながら、外の世界 (配列ではない) を n 回変更することだけが本当に必要な場合でも、目的を.map(transformer)
果たします。.filter(predicate)
.reduce(combiner, initialValue)
arr[i]
i
では、モットーは明らかに才能があり知識豊富な人物であり、自分が何をしているのか、どこに向かっているのかを知っていると想像したいと思います (時々... ...その他回は頭から先に学習します)?
答えは実際には非常に単純で、見落としのためにボブおじさんとクロックフォード卿の両方が顔をしかめるようなものです。
それをきれいにします。
function toArray (arrLike) { // or asArray(), or array(), or *whatever*
return [].slice.call(arrLike);
}
var checked = toArray(checkboxes).filter(isChecked);
checked.forEach(listValues);
さて、これを自分で行う必要があるかどうか疑問に思っている場合、答えはノーかもしれません...
これはまさに... ...最近の高次機能を備えたすべての(?)ライブラリによって行われています。
lodash、アンダースコア、さらには jQuery を使用している場合、それらはすべて一連の要素を取得し、アクションを n 回実行する方法を備えています。
そのようなものを使用していない場合は、必ず独自のものを作成してください。
lib.array = (arrLike, start, end) => [].slice.call(arrLike, start, end);
lib.extend = function (subject) {
var others = lib.array(arguments, 1);
return others.reduce(appendKeys, subject);
};
ES6(ES2015) 以降のアップデート
slice( )
/ /etc ヘルパー メソッドは、配列を使用するのと同じようにリストを使用したい人々の生活を楽にするだけarray( )
でなく、比較的近い ES6+ ブラウザーで操作する余裕がある人々にとっても便利です。将来、または今日の Babel の「トランスパイル」の場合、言語機能が組み込まれているため、この種のことは不要になります。
function countArgs (...allArgs) {
return allArgs.length;
}
function logArgs (...allArgs) {
return allArgs.forEach(arg => console.log(arg));
}
function extend (subject, ...others) { /* return ... */ }
var nodeArray = [ ...nodeList1, ...nodeList2 ];
とてもきれいで、とても便利です。
RestおよびSpread演算子を検索します。BabelJS サイトで試してみてください。技術スタックが整っている場合は、Babel とビルドステップを使用して本番環境で使用してください。
非配列から配列への変換を使用できない正当な理由はありません... ...同じ醜い行をどこにでも貼り付けるだけで、コードを台無しにしないでください。