2016-04-08 10 views
1

複数の次元配列のイテレータを探していますが、配列を簡単に反復処理できます。 例えば:javascriptの多次元配列のイテレータ

var multipeArrayLike = [[1,[21,22],3,4],[5,6,7,8]] 
var iterator = getIterator(multipeArrayLike) 

console.log(iterator.next().value) // should return 1 
console.log(iterator.next().value) // should return 21 
console.log(iterator.next().value) // should return 22 
console.log(iterator.next().value) // should return 3 
console.log(iterator.next().value) // should return 4 
console.log(iterator.next().value) // should return 5 
.... 
console.log(iterator.next().value) // should return 8 
+0

あなたは値がある場合の値をチェックする再帰関数を作成する必要があります配列は、値が配列でない場合、この値を持つこの関数を再度呼び出す。 – itzmukeshy7

答えて

4

あなたはこれと同様の方法で再帰発電機を使用することができます。

'use strict'; 
 

 
function *flat(a) { 
 
    if (!Array.isArray(a)) { 
 
     yield a; 
 
    } else { 
 
     for (let x of a) 
 
      yield *flat(x); 
 
    } 
 
} 
 

 
var multipeArrayLike = [[1, [21, 22], 3, 4], [5, 6, 7, 8]] 
 

 

 
for (let y of flat(multipeArrayLike)) 
 
    document.write('<pre>'+JSON.stringify(y,0,3));

+0

あなたの例に '' use strict '; 'を追加すると、それはChrome版(少なくとも私が持っているバージョン)で動作します。 –

+0

@FelixKling:ここでうまくいきますが(49.0.2623.110)、感謝しました。 – georg

+0

ああ、私はまだ48.0.2564.116です。非厳密モードではブロックスコープ変数は許可されません。私はアップグレードする必要があります:D –