ホームページ ウェブフロントエンド jsチュートリアル JavaScript_javascript スキルにおけるイテレータとジェネレータの詳細な説明

JavaScript_javascript スキルにおけるイテレータとジェネレータの詳細な説明

May 16, 2016 pm 04:32 PM
javascript ビルダー イテレーター

コレクション内の各項目の処理は、非常に一般的な操作です。JavaScript では、単純な for ループや for each ループから、map()、filter()、配列内包表記まで、コレクションを反復処理するためのさまざまな方法が提供されています。 JavaScript 1.7 では、イテレーターとジェネレーターにより、コア JavaScript 構文に新しい反復メカニズムが導入され、for...in および for each ループの動作をカスタマイズするメカニズムも提供されます。

イテレーター

反復子は、コレクション シーケンス内の 1 つの要素に一度にアクセスし、シーケンス内の反復の現在位置を追跡するオブジェクトです。 JavaScript では、イテレータは、シーケンス内の次の要素を返す next() メソッドを提供するオブジェクトです。このメソッドは、シーケンス内のすべての要素が走査されると StopIteration 例外をスローします。

イテレータ オブジェクトが作成されると、 next() を繰り返し呼び出すことによって明示的に呼び出すか、JavaScript の for...in および for each ループを暗黙的に使用して呼び出すことができます。

オブジェクトと配列を反復処理するための単純なイテレータは、Iterator() を使用して作成できます。

コードをコピーします コードは次のとおりです:

var lang = { 名前: 'JavaScript'、誕生年: 1995 };
var it = Iterator(lang);

初期化が完了すると、 next() メソッドを呼び出して、オブジェクトのキーと値のペアに順番にアクセスできます。

コードをコピーします コードは次のとおりです:

var par = it.next() //キーと値のペアは ["name", "JavaScript"]
です。 par = it.next(); //キーと値のペアは ["誕生日", 1995]
ペア = it.next(); // `StopIteration` 例外がスローされます

next() メソッドを明示的に呼び出す代わりに、for…in ループを使用できます。 StopIteration 例外がスローされると、ループは自動的に終了します。

コードをコピーします コードは次のとおりです:

var it = Iterator(lang);
for (その中の var ペア)
Print(pair); //毎回 1 つの [key, value] キーと値のペアを出力します

オブジェクトのキー値のみを反復したい場合は、値 true を指定して 2 番目のパラメーターを Iterator() 関数に渡すことができます。

コードをコピーします コードは次のとおりです:

var it = Iterator(lang, true);
for (var キーが入っています)
Print(key); //キー値を毎回出力します

Iterator() を使用してオブジェクトにアクセスする利点の 1 つは、Object.prototype に追加されたカスタム プロパティがシーケンス オブジェクトに含まれないことです。

Iterator() は配列でも使用できます:

コードをコピーします コードは次のとおりです:

var langs = ['JavaScript', 'Python', 'Haskell'];
var it = Iterator(langs);
for (その中の var ペア)
print(pair); //各反復は [index, language] キーと値のペアを出力します

オブジェクトを走査するのと同じように、2 番目のパラメーターとして true を渡すと、走査は配列インデックスになります。

コードをコピーします コードは次のとおりです:

var langs = ['JavaScript', 'Python', 'Haskell'];
var it = Iterator(langs, true);
for (変数 i が含まれています)
print(i) // 0、次に 1、次に 2 を出力します
;

let キーワードを使用して、ループ内のブロック変数にインデックスと値を割り当てます。また、分割代入も使用できます。

コードをコピーします コードは次のとおりです:

var langs = ['JavaScript', 'Python', 'Haskell'];
var it = Iterators(langs);
for ([i, lang] を入れます)
print(i ': ' lang) //「0: JavaScript」などを出力

カスタム反復子を宣言します

要素のコレクションを表すオブジェクトは、指定された方法で反復処理される必要があります。

1. 範囲を表すオブジェクトを反復すると、その範囲に含まれる数値を 1 つずつ返します。
2. ツリーのリーフ ノードには、深さ優先または幅優先
を使用してアクセスできます。 3. データベース クエリの結果を表すオブジェクトを反復処理すると、結果セット全体が単一の配列にロードされていない場合でも、行ごとに返される必要があります
4. 無限の数学的シーケンス (フィボナッチ数列など) に作用する反復子は、無限長のデータ構造を作成せずに結果を次々に返す必要があります

JavaScript を使用すると、カスタムの反復ロジックを作成し、それをオブジェクトに適用できます

下限値と上限値を含む単純な Range オブジェクトを作成します。

コードをコピーします コードは次のとおりです:

関数範囲(低、高){
This.low = 低い;
This.high = 高い;
}

ここで、範囲内のすべての整数を含むシーケンスを返すカスタム反復子を作成します。イテレータ インターフェイスでは、シーケンス内の次の要素を返すか、StopIteration 例外をスローする next() メソッドを提供する必要があります。

コードをコピーします コードは次のとおりです:

関数 RangeIterator(range){
This.range = 範囲;
this.current = this.range.low;
}
RangeIterator.prototype.next = function(){
If (this.current > this.range.high)
throw StopIteration;
その他
return this.current ;
};

RangeIterator は範囲インスタンスでインスタンス化され、現在のシーケンス位置を追跡するために現在のプロパティを維持します。

最後に、RangeIterator を Range と組み合わせるために、Range に特別な __iterator__ メソッドを追加する必要があります。 Range を反復しようとしたときに呼び出され、反復ロジックを実装する RangeIterator インスタンスを返す必要があります。

コードをコピーします コードは次のとおりです:

Range.prototype.__iterator__ = function(){
return new RangeIterator(this);
};

カスタム反復子が完了したら、範囲インスタンスを反復処理できます。

コードをコピーします コードは次のとおりです:

var range = new Range(3, 5);
for (範囲内の変数 i)
print(i) // 3、次に 4、次に 5
を出力します。

ジェネレーター: イテレーターを構築するより良い方法

カスタム反復子は便利なツールですが、内部状態を明示的に維持する必要があるため、作成時には慎重な計画が必要です。

ジェネレーターは非常に強力な関数を提供します。これにより、独自の反復アルゴリズムを含む関数を定義でき、独自の状態を自動的に維持できます。

ジェネレーターは、イテレーターファクトリーとして機能する特別な関数です。関数に 1 つ以上の yield 式が含まれる場合、その関数はジェネレーターと呼ばれます (翻訳者注: Node.js では、それを示すために関数名の前に * を追加する必要もあります)。

注: HTML の

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 Dec 17, 2023 pm 02:54 PM

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー Dec 17, 2023 pm 05:30 PM

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 Dec 17, 2023 pm 12:09 PM

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 Dec 17, 2023 am 09:39 AM

WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 Dec 17, 2023 pm 05:13 PM

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

最高の無料 AI アニメーション アート ジェネレーター 最高の無料 AI アニメーション アート ジェネレーター Feb 19, 2024 pm 10:50 PM

トップの無料 AI アニメーション アート ジェネレーターを見つけたい場合は、検索を終了することができます。アニメアートの世界は、そのユニークなキャラクターデザイン、魅惑的な色彩、魅惑的なプロットで何十年にもわたって視聴者を魅了してきました。ただし、アニメアートの作成には才能、スキル、そして多くの時間が必要です。しかし、人工知能 (AI) の継続的な発展により、最高の無料 AI アニメーション アート ジェネレーターの助けを借りて、複雑なテクノロジーを深く掘り下げることなくアニメーション アートの世界を探索できるようになりました。これにより、創造性を発揮するための新たな可能性が開かれます。 AIアニメアートジェネレーターとは? AI アニメーション アート ジェネレーターは、高度なアルゴリズムと機械学習技術を利用して、アニメーション作品の広範なデータベースを分析します。これらのアルゴリズムを通じて、システムはさまざまなアニメーション スタイルを学習し、識別します。

Golangイテレータの実装と使い方を詳しく解説 Golangイテレータの実装と使い方を詳しく解説 Mar 17, 2024 pm 09:21 PM

Golang は高速かつ効率的な静的コンパイル言語であり、その簡潔な構文と強力なパフォーマンスにより、ソフトウェア開発の分野で非常に人気があります。 Golang では、反復子 (Iterator) は、コレクションの内部構造を公開せずにコレクション内の要素を走査するために一般的に使用される設計パターンです。この記事では、Golang でイテレータを実装して使用する方法を詳しく紹介し、具体的なコード例を通じて読者の理解を深めるのに役立ちます。 1. イテレータの定義 Golang では通常、イテレータはインターフェースと実装から構成されます。

See all articles