从数组创建一对数组,生成圆形数组

时间:2013-10-17 20:12:35

标签: javascript arrays

我正在尝试创建一个接受数组并创建一对数组的函数 例如,数组[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数组pair循环,我得到[circular object Array]。我想 嵌套的for循环也适用于pairs,但它不会。 我读到在javascript对象和本机对象之间形成循环引用导致内存泄漏但我不知道这是否发生在这里。请帮忙。

error..

3 个答案:

答案 0 :(得分: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] + "]]");
}

我打赌它会打印出来。

答案 1 :(得分:0)

也许你可以利用

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

在chrome-console和最新的ff-firebug

答案 2 :(得分:0)

最后,在您return的结果中,键入以下内容。

return [...new Set(pairs)]

此方法仅返回唯一值。