2016-11-03 5 views
1

配列からジェネレータ関数を作成しようとしています。最も単純な例は次のようになります。配列からジェネレータ関数を作成する

const array = [1,2,3,4] 

    function * createGenerator() { 
     array.map(function(elem){ 
      yield elem 
     } 
    } 

と私は期待する。また

function * createGenerator() { 
     yield 1 
     yield 2 
     yield 3 
     yield 4 
    } 

私はこのようなswitch文を追加する場合:

function processServerActions (array) { 
    for (let elem in array) { 
     switch(elem) { 
      case 1: 
       yield 1111 
      case 2: 
       yield 22222 
      case 3: 
       yield 333333 
       yield 444444 
      case 4: 
       yield 55555 
     } 
    } 

} 

をしかし、機能していません。私は何が欠けていますか?

ありがとうございます!

+1

いくつかの構文エラーが... – dandavis

答えて

3

コールバックはコールバックのみを返すことができます。ジェネレータ関数を生成するには、yieldは関数の内部でなければならないが、ネストされたコールバックの外側になければならない。

for ... ofを使用して値を生成する方が良いでしょう。

function* createGenerator() { 
 
    for (let elem of array){ 
 
     yield elem; 
 
    } 
 
} 
 

 
const array = [1,2,3,4], 
 
     c = createGenerator(); 
 

 
console.log([...c]);

あなたはofの代わりinfor (let elem of array)を必要としています。

function* createGenerator() { 
 
    for (let elem of array) { 
 
     switch(elem) { 
 
      case 1: 
 
       yield 1111; 
 
       break; 
 
      case 2: 
 
       yield 22222; 
 
       break; 
 
      case 3: 
 
       yield 333333; 
 
       yield 444444; 
 
       break; 
 
      case 4: 
 
       yield 55555; 
 
     } 
 
    } 
 
} 
 

 
const array = [1,2,3,4], 
 
     c = createGenerator(); 
 

 
console.log([...c]);

+0

グレートを飛び出し、と私は配列から取得しています数に応じて、いくつかの他の事を得るために、switch文を追加したい場合は? (私はこれについての詳細を表示するために質問を編集しました) – Nicolas

+0

偉大な、働いて、ありがとう! – Nicolas

関連する問題