我将此方法从Java移植到Javascript。使用"原创"在其中包含9个对象的数组中,Java代码创建了大小为4的3000个子数组。
在这个javascript代码中,我得到6个大小为9的子数组。
var hitterArray = new Array();
function permute(level, permuted, used, original){
if (level == 4) {
hitterArray.push(permuted); //array of arrays
} else {
for (i = 0; i < original.length; i++) {
if (!used[i]) {
used[i] = true;
permuted.push(original[i]);
permute(level + 1, permuted, used, original);
used[i] = false;
}
}
}
}
我想要3000个大小为4的子阵列,为什么这不起作用?
这是我初始化置换函数的方法:
var used = new Array(results.length);
for(p = 0; p < used.length; p++){
used[p] = false;
}
var permuteArray = new Array();
permute(0, permuteArray, used, results);
洞察力赞赏
答案 0 :(得分:1)
我认为错误发生在for循环中,您需要使用i
声明var
,否则您将其设为全局变量。
for(var i = 0; ....
可能产生影响的另一件事是你总是传递对数组的引用:used
和permuted
可能会对结果产生一些影响,考虑用{{1克隆数组创建它们的新副本。
而且我认为9个中4个对象的排列应该是3024(9 * 8 * 7 * 6),所以你应该得到3024个4个数组
array.slice()