2

配列を取り、配列のペアを作成する関数を作成しようとしています。たとえば、[1,2,3,4]ペアは次のようになります。

pair = [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]] ;

ペアは次のようになります。

pairs = [[[1,2],[1,3]], [[1,2],[1,4]], [[1,2],[2,3]] .... [[2,4],[3,4] ] ;

これまでのところ、私の関数は次のようになります。

function makePairs(arr) {

    var l = arr.length -1 ,  
    pair =  [];
        for(var i=0; i < l ; i++ ) {
          for(var j=i+1; j <= l ; j++ ) {
            pair.push( [arr[i],arr[j]]) ;
          }
        }  

  // i get the desired pair by the above nested for loop... 
  // console.log(pair) ; 

  // i try to do the same nested for loop with the pair array.. 
  // but i get [circular object Array]; 
  var k =  pair.length -1,
  pairs = [] ;
          for(var m=0; m < k ; m++ ) {
          for(var n=m+1; n <= k ; n++ ) {
            pairs.push( [pair[m],pair[n]]) ;
          }
        }
    return pairs; 
}

console.log(  makePairs([1,2,3,4]) );

したがって、pair目的のペアが得 られますが、配列で同じタイプのネストされたforループを実行すると、 . ネストされた for ループも機能すると思いましたが、機能しません。javascript オブジェクトとネイティブ オブジェクトの間で循環参照が形成され、メモリ リークが発生していると読みましたが、ここで発生しているかどうかはわかりません。助けてください。pair[circular object Array]pairs

エラー..

4

2 に答える 2

1

問題はデバッガ自体にあるのだろうか。既に参照されているアイテムを参照している場合はいつでも [circular object Array] を出力しています。

より多くのコンソール メッセージを作成してみてください。最後の行を次のように置き換えます。

var answer = makePairs([1,2,3,4]);
for (var i = 0; i < answer.length; ++i) {
    console.log("[[" + answer[i][0][0] + ", " + answer[i][0][1] + "], [" + 
         answer[i][1][0] + ", " + answer[i][1][1] + "]]");
}

問題なく印刷されると思います。

于 2013-10-17T20:33:01.983 に答える
0

多分あなたは利用することができます

console.dir(  makePairs([1,2,3,4])  )

chrome-console と最新の ff-firebug で

于 2013-10-17T20:17:56.387 に答える