1. ホーム
  2. javascript

[解決済み] foreach時に配列の値を変更する

2022-03-22 16:41:53

質問

の例です。

var arr = ["one","two","three"];

arr.forEach(function(part){
  part = "four";
  return "four";
})

alert(arr);

配列は元の値のままですが、反復処理関数から配列の要素に書き込みアクセスする方法はありますか?

どのように解決するのですか?

コールバックには、要素、インデックス、および配列そのものが渡されます。

arr.forEach(function(part, index, theArray) {
  theArray[index] = "hello world";
});

編集 - コメントで指摘されているように .forEach() 関数は第二引数を取ることができ、その値は this は、コールバックの各呼び出しで

arr.forEach(function(part, index) {
  this[index] = "hello world";
}, arr); // use arr as this

その2番目の例では arr として設定されている。 this に含まれる配列が、コールバックの中にあると考えるかもしれません。 .forEach() の呼び出しは、もしかしたら デフォルト の値です。 this が、何らかの理由でそうなっていない。 this になります。 undefined 第二引数がない場合

(注意: 上記の this は、コールバックが => 関数を使用します。 this は、そのような関数が呼び出されたときに何かに束縛されることはありません)。

また、Array プロトタイプには似たようなユーティリティがたくさんあり、Stackoverflow にはある関数や別の関数について多くの質問が寄せられているので、最適な解決策は単に別のツールを選ぶことだということを覚えておくことが大切です。あなたは持っています。

  • forEach 配列の各エントリに対して何かを行う。
  • filter 指定された項目のみを含む新しい配列を作成します。
  • map 既存の配列を変換して、一対一の新しい配列を作成します。
  • some 配列の少なくとも1つの要素がある説明に適合するかどうかをチェックする。
  • every を使用して すべて のエントリが説明と一致します。
  • find 配列の中の値を探す

などがあります。 MDNリンク