JavaScriptで配列をループするweb-dev-qa-db-ja.com/home/日本語/javascript/JavaScriptで配列をループするJavaScriptで配列をループするJavaでは、forループを使用して、次のように配列内のオブジェクトを走査できます。something}JavaScriptでも同じことができますか。オブジェクトプロパティを意味します。次の理由で、これは配列のようなオブジェクトには使用しないでください。繰り返しの順序は保証されていません、配列インデックスは数値順に訪問されないかもしれません。継承されたプロパティも列挙されています。2つ目のポイントは、Array.prototypeオブジェクトを拡張してそこにメソッドを含めると、そのプロパティも列挙されるなど、多くの問題が発生する可能性があることです。"foo!"をコンソール化します。ネイティブのプロトタイプ拡張に大きく依存しているライブラリを使用している場合(例えばMooToolsなど)、これは特に問題になります。前に述べたfor-inステートメントには、enumerateオブジェクトのプロパティがあります。propertiesだけを列挙することを可能にします、それはそれがオブジェクトに物理的に持っているプロパティだけであり、継承されたプロパティではありません。次の記事を読むことをお勧めします。"Harmony"リリース)で導入されたfor...of機能を含んでいると仮定すると...これは最近かなり安全な仮定です。2015はletとconstを介してブロックスコープ変数も提供しています。Webブラウザで実行するコードを書く場合、サイト開発者はクライアントがどのブラウザ/バージョンを使うのかわからないことが多いです。Explorer)に準拠していると想定できる場合は、代わりにforEachイテレータメソッドを使用できます。その場合は、配列内の各項目で呼び出される関数を渡します。);しかし、それでも想定するには多すぎて、allバージョンのJavaScriptで機能するものが必要な場合は、明示的なカウントループを使用する必要があります。スパース配列を適切に処理する最も安全なバージョンは、次のようなものです。}}(ループ条件に完全なmyStringArray.length式を含めるのではなく)ローカル変数に長さの値を割り当てると、毎回プロパティの検索がスキップされるため、パフォーマンスに大きな違いが生じる可能性があります。私のマシンでRhinoを使うと、スピードアップは43%です。このように、ループ初期化節で長さキャッシュが行われることがよくあります。{他の人が言及したfor...inの構文は、オブジェクトのプロパティをループするためのものです。JavaScriptのArrayは単に数値のプロパティ名を持つオブジェクト(および自動的に更新されるlengthプロパティ)なので、理論的にはそれを使ってArrayをループすることができます。問題は、それ自体が数値プロパティ値に限定されず(メソッドでも実際には値がクロージャであるプロパティであることに注意してください)、数値順に繰り返されることもありません。したがって、for...in構文は、配列をループするためにnotを使用する必要があります。Reedmapを使うことができます。ような他の言語でも利用可能な関数型プログラミング手法です。alert(item);})一般的な構文は次のとおりです。array.map(func)一般的にfuncは1つのパラメータを取ります。それは配列の要素です。JavaScriptの場合、アイテムのインデックスである2番目のパラメータと、配列そのものである3番目のパラメータを取ります。array.mapの戻り値は別の配列なので、このように使用できます。10;});そして今xは[10,20,30,40]です。関数をインラインで書く必要はありません。それは別の機能かもしれません。my_list.map(item_processor);これは次のようなものに相当します。{item_processor(item);}あなたがnew_listを取得しないのを除いて。hasenJavaScriptでは、for-inループでArrayをループすることはお勧めできませんが、次のようにforループを使用することをお勧めします。i++){}それは同様に最適化されています(配列の長さを「キャッシュする」)。この件についての私の投稿を読んでください。Script)については言及していません。2015は繰り返しを行うための新しいメカニズム、for..ofループをもたらしています。この新しい構文は、JavaScriptで配列を反復するための最もエレガントな方法です(反復インデックスが必要ない限り)が、ブラウザではまだ広くサポートされていません。37以降で動作し、他のブラウザでは本来動作しません(下記のブラウザの互換性を参照)。これはNodeでも動作します(私はバージョン0.12.0でテストしました)。BernardesOpera、Safari、Firefox、Chromeは現在、多くの一般的なループを最適化するための一連の拡張Arrayメソッドを共有しています。あなたはそれらのすべてを必要としないかもしれませんが、それらは非常に有用であるか、またはすべてのブラウザがそれらをサポートするならばそうなるでしょう。両方が使用するアルゴリズムを公開しましたので、あなたがそれらを自分で追加することができます。何らかの条件またはテストを満たす項目の配列を返します。すべての配列メンバがテストにパスした場合はtrueを返します。テストに合格した場合はtrueを返します。各配列メンバーに対して関数を実行し、何も返しません。forEachに似ていますが、各要素の演算結果の配列を返します。これらのメソッドはすべて、最初の引数に関数を取り、オプションの2番目の引数を持ちます。これは、関数をループ処理するときに配列メンバにスコープを設定するオブジェクトです。必要になるまで無視してください。引数と正確に一致する最初または最後の要素の適切な位置を見つけます。4GL、C/C++、そして今では考えられない他のいくつかの言語でプログラムしました。それらはすべて独自の言語上の特異点を持っていますが、これらの各言語は同じ基本概念の多くを共有しています。このような概念には、プロシージャ/関数、IFステートメント、FORループ、およびWHILEループが含まれます。伝統的なfor-ループ従来のforループには、3つの要素があります。ループブロックが実行される前に毎回条件をチェックし、falseの場合はループを終了します。ループブロックが実行された後に毎回実行されるこれら3つのコンポーネントは;シンボルによって互いに分離されています。これら3つのコンポーネントのそれぞれの内容はオプションです。以下は可能な限り最小限のforループです。}を含める必要があります。通常、初期化はインデックスを宣言するために使用され、条件はそのインデックスを最小値または最大値と比較するために使用され、後置はインデックスを増分するために使用されます。console.log(i);}伝統的なforループを使って配列をループ処理する配列をループ処理する従来の方法は、次のとおりです。console.log(myArray[i]);}あるいは、逆方向にループしたい場合は、次のようにします。console.log(myArray[i]);}ただし、たとえば次のように、さまざまなバリエーションが考えられます。console.log(value);}どちらが最もうまく機能するかは、主に個人的な好みと、実装している特定のユースケースの両方の問題です。これらのバリエーションは、非常に古いものも含め、すべてのブラウザでサポートされています。whileループforループの代替手段の1つはwhileループです。配列をループ処理するには、これを実行できます。console.log(value);}forループは、従来のwhileループと同様に、最も古いブラウザでもサポートされています。whileループはすべてforループとして書き換えることができます。上記のwhileループは、このfor-ループとまったく同じように動作します。console.log(value);}For...inとfor...ofJavaScriptでは、これを行うこともできます。console.log(myArray[i]);}ただし、これはすべての場合において従来のforループと同じ動作をするわけではないため、慎重に使用する必要があります。考慮する必要がある可能性のある副作用があります。in"を使用するのはなぜ悪い考えですか。