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

我想知道问题是否出在调试器本身。每当它引用已引用的项目时,它都会输出 [循环对象数组]。

尝试制作更多控制台消息。将最后一行替换为:

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 控制台和最新的 ff-firebug 上

于 2013-10-17T20:17:56.387 回答