2013-10-17 161 views
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給了我想要的對,但是當我做 forpair陣列相同的嵌套類型,我得到[circular object Array]。我認爲 嵌套for循環也將在pairs工作,但它不。 我讀了循環引用形成一個javascript對象和導致內存泄漏的本地對象,但我不知道這是否發生在這裏。請幫忙。

error..

+0

您的代碼在FF中運行時沒有錯誤。 –

+0

它在Chrome中也運行良好。並且在IE中運行正常,除了IE在日誌記錄時展平陣列的事實。 –

+0

@PsychHalf請將您的輸出作爲對問題的編輯發佈,而不是讓我們看看鏈接上的附加廣告。你在哪裏運行你的代碼,你會得到圓形對象引用? –

回答

1

我不知道這個問題是調試器本身使用的

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

。只要它指的是已經涉及的項目,它就會輸出[圓形對象陣列]。

嘗試製作更多控制檯消息。用你的最後一行替換:

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] + "]]"); 
} 

我敢打賭它會打印出好的。

+0

它現在打印出來罰款..該死的我覺得很愚蠢.. –

+0

@PsychHalf不要覺得愚蠢 - 你的代碼是好的,每個人總是相信他們的調試器。你在用什麼調試器? –

+0

謝謝...嗯..好吧..不管它是什麼,我不會再使用它..我馬上把它從窗口扔出去.. –

-1

也許你可以讓Chrome的控制檯 和latesst FF-螢火

+0

是的,它應該,請繼續downvoting –