未定義のジレンマが返される: 関数と配列の反復の背後にある謎を明らかにする
プログラミングの領域では、関数と配列を使用するときに共通の謎が生じます。配列の反復。 return ステートメントはよく使用されますが、結果が未定義の場合もあります。この複雑な問題の背後にある理由を明らかにするために、キーに基づいて配列からオブジェクトを取得しようとする getByKey と呼ばれる関数が関与する特定のケースを調べてみましょう。
エニグマ
オブジェクトの配列内でオブジェクトを検索することを目的とした getByKey 関数は、一貫して未定義を返します。内部コールバック関数内に return ステートメントが存在するにもかかわらず、この不可解な動作は開発者を困惑させています。
解決策の探索
調査すると、return がステートメントは、forEach メソッドに提供されるコールバック関数内で実行されます。これは、getByKey 関数自体から返されるのと同じではありません。この問題を修正するには、forEach の代わりに map メソッドを利用するようにコードを変更するか、反復プロセスをより詳細に制御できる従来の for ループを選択することができます。
最適化されたコードwith Map
map メソッドを使用して、配列を目的の結果を含む新しい配列に変換します。元の配列の各要素に対して、キーを検索して一致するオブジェクトを返すコールバック関数を適用します。
function getByKey(key) { return data.map(function (val) { if (val.Key === key) { return val; } }).filter(function (val) { return val !== undefined; })[0]; }
For ループを使用した簡略化されたソリューション
効率を高めるために、for ループを使用して配列要素を反復処理できます。このアプローチにより、ループを直接制御できるようになり、一致するオブジェクトが見つかったときにすぐに抜け出すことができます。
function getByKey(key) { for (var i = 0; i < data.length; i++) { if (data[i].Key === key) { return data[i]; } } }
微妙な点を理解する
重要な点に注意してください。 forEach のコールバック関数は、それを含む関数から直接返されないこと。コールバック内の return ステートメントは、コールバック自体の実行に影響しますが、外側の関数の実行フローには影響しません。したがって、配列反復関数を使用する場合は、return ステートメントの配置を慎重に検討することが重要です。
以上が配列の反復を使用すると関数が未定義を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。