ES6イテレータージェネレーター、エレメンタリーの使用シナリオを学ぶ

イテレータジェネレータの用途は何ですか?使用するシーン!

基本知識

今日、私はes6ジェネレーターとイテレーターについて学びました。私は本当にたくさんの考えを持っています。私はフロントエンドを学んでいる学生です。何かがおかしいと言うかもしれません。ご容赦ください。私が学んだことを要約することです。 。さあ始めましょう

配列拡張

ジェネレータイテレータについて説明する前に、es6の新しく追加された配列の拡張であるes6の知識を最初に理解する必要があります。3つの関数があります:entries()、keys()、values()、これら3つの関数は非常に似ています、それらはすべてDo onethingにあります。例:

for(let index of ['a','b','c','d'].keys(){
	console.log(index)  //0,1,2,3
}
for(let values of ['a','b','c'].values()){
	console.log(values)  //'a','b','c'
}
for(let [index,value] of ['a','b','c'].entries()){
	console.log([index,value])  //  [0,'a'],[1,'b'],[2,'c'];
}

entry()、keys()、values()の3つの関数はイテレーターを返します。返されるすべての値はイテレーターの機能を持っているため、for ... ofメソッドを使用できます。
これらの3つの方法を理解していれば、ジェネレータイテレータに入ることができます。

イテレータ

イテレータとは何ですか?これは新しいトラバーサルメカニズムです。2つのコアがあると結論付けました。1つは、データにすばやくアクセスできるインターフェイスであるということです。2つ目は、データ構造をトラバースするために使用されるポインターです。配列に対する比較的単純なイテレータについて説明します。

const items = ['one','two','three'];
//创建迭代器
const ite = items(Symbol.Iterator)();
//进行获取
console.log(ite.next())   //{value:'one',done:false}
console.log(ite.next())   //{value:'two',done:false}
console.log(ite.next())   //{value:'three',done:false}
console.log(ite.next())   //{value:undefined,done:true}

ite.next()の結果はどういう意味ですか?配列の値をトラバースすることです。Doneはトラバーサルが完了したかどうかを表します。ite.next()が4回呼び出されたとき、値がないため、doneの値はtrueです。

発生器

ジェネレーターは関数ですが、通常の関数との違いは次のとおりです。関数を宣言する方法は次のとおりです。

function* func(ele){
	console.log(ele);
}

もう1つの違いは、yieldは関数内でのみ呼び出すことができることです。イールドを説明します。つまり、ジェネレーターはyieldキーワードを使用して関数を一時停止します。説明はより明確です。つまり、関数を宣言すると、内部にイールドを記述でき、そこでスタックした関数を「処理」できます。ジェネレーターの1つのメソッドはnext()です。このメソッドは、yieldがスタックしている場所を再度開き、関数のコンテンツを続行することです。

function* func(){
	console.log('start');
	yield "2";
	console.log('end');
}
let fn = func();
fn.next(); // "start"  //{value:'2',done:false}

少し要約すると、ジェネレーターは段階的に実行され、yieldは実行を一時停止し、next()は実行を再開します。

使用するシーン

最もよく使用されるイテレータとジェネレータの使用シナリオには2つのタイプがありますが、今日は1つのタイプについて説明し、次回はもう1つのタイプを共有します。
このイテレータジェネレータは、イテレータを持たないオブジェクトのインターフェイスを作成するためのものです。
次に例を示します。

//第一步 创建一个无迭代器接口的对象
let obj = {
	name: "xiaoChen",
	age: 21
}
//第二步 写一个迭代器接口 (用到了keys(),忘了往上看看哈)
function* objectEntries(obj){
    const Keys = Object.keys(obj);
    for(let key of Keys){
        yield [key,obj[key]];
    }
}
//第三步 给obj接口
obj[Symbol.iterator] = objectEntries;
//第四步 遍历
for(let [name,age] of objectEntries(obj)){
    console.log(`${name}:${age}`); //name: "xiaoChen",age: 21
}
//成功的遍历出obj里面的属性

さて、ここで共有して、次回は別の使用シーンを共有してください。

おすすめ

転載: blog.csdn.net/iloveyu123/article/details/114442791