foreachを実行するときに配列の値を変更する 質問する

foreachを実行するときに配列の値を変更する 質問する

例:

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 番目の引数が指定されていない場合は になります。thisthisundefined

this(注:コールバックが関数である場合、上記の内容は適用されません。そのような関数が呼び出されると、 は決して何にもバインドされない=>ためです。)this

また、Array プロトタイプには類似のユーティリティが多数用意されており、Stackoverflow ではさまざまな機能に関する質問が多数寄せられているため、最善の解決策は別のツールを選択することだけであることを覚えておくことが重要です。次のツールがあります。

  • forEach配列内のすべてのエントリに対して何らかの処理を実行します。
  • filter適格なエントリのみを含む新しい配列を生成するため。
  • map既存の配列を変換して 1 対 1 の新しい配列を作成します。
  • some配列内の少なくとも 1 つの要素が何らかの説明に適合するかどうかを確認する。
  • every配列内のすべてのエントリが説明と一致するかどうかを確認します。
  • find配列内の値を探す

等々。MDNリンク

おすすめ記事