N个嵌套迭代

时间:2014-10-14 14:25:49

标签: javascript recursion

我有一个包含N个对象的数组

var test = [obj1, objc2, ..., objN]

对象采用这种格式

{"Key", "number", "Name" : "string", "OtherFields" : "Data"}

我想像这样迭代

for (var i = 0; i < test.length; i++) {
  for (var j = 1; j < test.length; j++) {
    for (var k = 2; k < test.length; k++) {
      console.log(test[i].Name + test[j].Name + test[k].Name)
    }
  }
}

如何在数组中的n个对象中实现此结果?

示例:

我有数组[1, 2, 3, 4] , [2,4,5], [1,2]

我想得到这个结果:

1 2 1
1 2 2
1 4 1
1 4 2
1 5 1
1 5 2
.....
.....
4 5 2

这些数组并不总是3,但可以是任何数字&gt; = 2

2 个答案:

答案 0 :(得分:0)

如果我理解正确,你想要排列。

这是一种递归方法:

function perm(test, max_depth, depth, s){
    if(depth === undefined)
        depth = max_depth;
    if(s === undefined)
        s = '';
    if(depth == 0)
        console.log(s);
    for(var i=depth; i<test.length;i++){
        perm(test, max_depth, depth-1, s + test[i].Name);
    }
}

答案 1 :(得分:0)

var N = 10;
var n = 3;

var test = [];
for (var i = 0; i < N; i++) {
    test.push({"Name" : "obj" + i});
}

function log_name_combinations(a, n) {
    function nestedlog(a, maxlvl, lvl, s) {
        if (lvl < maxlvl) {
            for (var i = lvl; i < a.length; i++) {
                nestedlog(a, maxlvl, lvl+1, s + a[i].Name);
            }
        } else {
            console.log(s);
        }
    }

    nestedlog(a, n, 0, "");
}

log_name_combinations(test, n);

Demo at JsFiddle

PS:你为什么要在i索引处开始i级迭代?