例:
var arr = ["one","two","three"];
arr.forEach(function(part){
part = "four";
return "four";
})
alert(arr);
配列はまだ元の値のままですが、反復関数から配列の要素に書き込みアクセスする方法はありますか?
ベストアンサー1
コールバックには、要素、インデックス、および配列自体が渡されます。
arr.forEach(function(part, index, theArray) {
theArray[index] = "hello world";
});
編集— コメントに記載されているように、関数は 2 番目の引数を取ることができ、これはコールバックの各呼び出しで.forEach()
の値として使用されます。this
arr.forEach(function(part, index) {
this[index] = "hello world";
}, arr); // use arr as this
2 番目の例では、コールバックでarr
として設定されていることがわかります。呼び出しthis
に含まれる配列はのデフォルト値.forEach()
であると思われるかもしれませんが、何らかの理由でそうではありません。2 番目の引数が指定されていない場合は になります。this
this
undefined
this
(注:コールバックが関数である場合、上記の内容は適用されません。そのような関数が呼び出されると、 は決して何にもバインドされない=>
ためです。)this
また、Array プロトタイプには類似のユーティリティが多数用意されており、Stackoverflow ではさまざまな機能に関する質問が多数寄せられているため、最善の解決策は別のツールを選択することだけであることを覚えておくことが重要です。次のツールがあります。
forEach
配列内のすべてのエントリに対して何らかの処理を実行します。filter
適格なエントリのみを含む新しい配列を生成するため。map
既存の配列を変換して 1 対 1 の新しい配列を作成します。some
配列内の少なくとも 1 つの要素が何らかの説明に適合するかどうかを確認する。every
配列内のすべてのエントリが説明と一致するかどうかを確認します。find
配列内の値を探す
等々。MDNリンク