たとえば、次の 1 次元配列を走査します: コードをコピー コードは次のとおりです: [javascript] view plaincopyprint? var a1 = [1]; var a2 = [1, 2] ; 長さは異なりますが、ループするのは非常に簡単でエレガントです: コードをコピー コードは次のとおりです: [javascript] view plaincopyprint? var dumpArrayByLoop = function(a) { for (var i = 0; i println(a[i]) } }; > 代わりに再帰を使用すると、見た目がぎこちなくなります: コードをコピー コードは次のとおりです:[javascript] view plaincopyprint? var dumpArrayByRecur = function(i, a) { if (i println(a[i]); dumpArrayByRecur(i 1, a); } これらは同じ結果を出力しますが、再帰バージョンは比較すると不格好に見えます。 ここで、メタデータが変更された場合について考えてみましょう。次元は 2 次元に拡張されます。 コードをコピー コードは次のとおりです:[javascript] view plaincopyprint? var a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]; この時点で、外側にもう 1 つのループ層を追加して二重ループを形成する必要があります: コードをコピー コードは次のとおりです:[javascript] view plaincopyprint? var dumpArrayByLoop = function(a) { for (var i = 0; i for (var j = 0; j println(a[i][j]); 動的 N 次元配列。ループの使用に対処するにはどうすればよいですか? 「レイヤー」の数が非常に深い、または不確実さえあるこの状況では、「レイヤー」間の問題を解決するには「再帰」を使用する必要があります。 コードをコピー コードは次のとおりです:[javascript] view plaincopyprint? var isArray = function(a) { return Object.prototype.toString.call(a) === '[オブジェクト配列]' var dumpArrayByRecur = function(a); { if (isArray(a)) { for (var i = 0; i dumpArray(a[i]) } else { println(a); } }; 上記のコードでは、子ノードが配列であることが判明した場合、再帰を使用して次のレベルに進み、同じレベルの走査はループを使用して完了します。