打破了他的头。
首先在一个循环中for:for (var j = 0; j <= 7; j++)ipush current_position.push(j);结果,生成了一个像这样的数组:
var current_position = [];
var cursor = 0;
function queens8() {
for (var j = 0; j <= 7; j++) {
if (check(cursor, j) == true) {
cursor++;
current_position.push(j);
if (current_position.length == 8) {
done_positions.push(current_position);
console.log(current_position);
//выводит на первой итерации: [0, 4, 7, 5, 2, 6, 1, 3]
}
queens8();
}
}
current_position.splice(cursor-1, 1);
cursor--;
return;
}
但是如果你像这样收集另一个数组中的所有数组:
done_positions.push(current_position);
我得到这样的东西:
[Array[0], Array[0], Array[0], Array[0], Array[0], Array[0], ...]
所以所有 120 次都通过了。为什么它们是空的,如何使它们不空?
更新:我解决了这个问题,但我不明白它为什么起作用:
done_positions.push([]+current_position);
因为
done_positions.push([]+current_position);放入了done_positions一个新元素,它是字符串表示的[]并集current_position- 在执行该字符串时。在你done_positions多次添加到同一个数组的引用之前。更新
是的,它
done_positions.push([current_position]);创建了一个包含一个元素的新数组,但这个元素将始终是同一个元素current_position。你需要:
或者