Javascript Array.push正在推送一个空数组,而不是我传递给它的完整数组
我正在为爬楼梯算法写一个解决方案。 提示具体如下: 你需要爬一个有n级台阶的楼梯,你决定通过跳上台阶来获得额外的锻炼。一次跳跃最多可跨k步。返回所有可能的跳跃顺序,你可以爬楼梯,分类 我的代码工作-我使用回溯,它应该以正确的顺序出现,除了。。。每当我将一个解决方案推送到应答数组中时,就会推送一个空数组。我记录了控制台日志以查看哪些内容被推送到了我的数组中,它是一个具有正确值的完整数组。我无法理解这是怎么发生的。这是我的密码:Javascript Array.push正在推送一个空数组,而不是我传递给它的完整数组,javascript,debugging,Javascript,Debugging,我正在为爬楼梯算法写一个解决方案。 提示具体如下: 你需要爬一个有n级台阶的楼梯,你决定通过跳上台阶来获得额外的锻炼。一次跳跃最多可跨k步。返回所有可能的跳跃顺序,你可以爬楼梯,分类 我的代码工作-我使用回溯,它应该以正确的顺序出现,除了。。。每当我将一个解决方案推送到应答数组中时,就会推送一个空数组。我记录了控制台日志以查看哪些内容被推送到了我的数组中,它是一个具有正确值的完整数组。我无法理解这是怎么发生的。这是我的密码: function climbingStaircase(n, k) {
function climbingStaircase(n, k) {
const solutions = [];
const findSolution = (progressArray, k, remaining) => {
if (remaining === 0) {
console.log('pA:', progressArray)
solutions.push(progressArray);
return;
} else {
for (let i = 1; i <= k; i++){
if (i <= remaining) {
progressArray.push(i);
findSolution(progressArray, k, remaining - i);
progressArray.pop();
}
}
}
}
findSolution([], k, n);
console.log('final solutions', solutions)
}
我尝试分配临时变量,以确保它始终引用正确的数组。我已经尝试将我的解决方案数组作为参数传入。。。所有这些似乎都不必要,但仍然返回相同的结果。我知道这是一个小东西,会让我翻白眼,但我看不见它。请提供帮助。您的代码在整个过程中使用一个数组,并弹出它推送到该数组中的所有条目。在保存到解决方案时,您可能希望保存阵列的副本:
实例:
函数攀爬楼梯,k{
常数解=[];
常量findSolution=progressArray,k,剩余=>{
如果剩余===0{
console.log'pA:',progressArray
solutions.pushprogressArray.slice;
回来
}否则{
对于let i=1;i您的代码在整个过程中使用一个数组,并弹出它推送到该数组中的所有条目。您可能希望在保存到解决方案时保存该数组的副本:
实例:
函数攀爬楼梯,k{
常数解=[];
常量findSolution=progressArray,k,剩余=>{
如果剩余===0{
console.log'pA:',progressArray
solutions.pushprogressArray.slice;
回来
}否则{
对于let i=1;i将solutions.pushprogressArray;替换为solutions.pushprogressArray.slice
您将progressArray传递到您的函数中,然后对其进行变异。但由于这始终是对progressArray的相同引用,因此您将对同一数组进行变异。最终,progressArray.pop;将删除所有元素,并最终得到五倍于相同空数组的数组
.slice创建数组的副本。将solutions.pushprogressArray;替换为solutions.pushprogressArray.slice
您将progressArray传递到您的函数中,然后对其进行变异。但由于这始终是对progressArray的相同引用,因此您将对同一数组进行变异。最终,progressArray.pop;将删除所有元素,并最终得到五倍于相同空数组的数组
.slice创建数组的副本。谢谢。我有一种预感,这是一种类似的东西。我甚至用另一个名称创建了一个数组的“副本”,忽略了数组是通过引用传递的,我需要创建一个新的数组作为副本。谢谢。我有一种预感,这是一种类似的东西。我甚至用另一个名称创建了一个数组的“副本”,忽略了数组是通过引用传递的,我需要创建一个新的数组作为副本。
pA: [ 1, 1, 1, 1 ]
pA: [ 1, 1, 2 ]
pA: [ 1, 2, 1 ]
pA: [ 2, 1, 1 ]
pA: [ 2, 2 ]
final solutions [ [], [], [], [], [] ]
solutions.push(progressArray.slice());
// -------------------------^^^^^^^^