Javascript Can';t将对象推送到数组

Javascript Can';t将对象推送到数组,javascript,arrays,Javascript,Arrays,我有这个简单的代码 let pathFinder = (entranceX, entranceY, grid) => { let distanceFromTop = entranceX; let distanceFromLeft = entranceY; let location = { distanceFromTop: distanceFromTop,

我有这个简单的代码

let pathFinder = (entranceX, entranceY, grid) => {
            let distanceFromTop = entranceX;
            let distanceFromLeft = entranceY;

            let location = {
                distanceFromTop: distanceFromTop,
                distanceFromLeft: distanceFromLeft,
                path: [],
                status: 'Start'
            }


            console.log('start', location)

            let queue = [];
            queue.push(location);
            console.log('queue', queue)
}
我确保“location”不是空的,它在控制台中显示为:

开始{distanceFromTop:1,distanceFromLeft:0,路径:数组(0),状态:“开始”}

但是当我想将它添加到队列中时,我得到的结果不是一个空数组,而是长度为0

“队列[{…}] 长度:0“


我错过了什么明显的东西吗?试图通过queue[location]添加它,但也不起作用

您应该检查let和var之间的差异

var pathFinder = (entranceX, entranceY, grid) => {
        var distanceFromTop = entranceX;
        var distanceFromLeft = entranceY;

        let location = {
            distanceFromTop: distanceFromTop,
            distanceFromLeft: distanceFromLeft,
            path: [],
            status: 'Start'
        }


        console.log('start', location)

        var queue = [];
        queue.push(location);
        console.log('queue', queue)
}

Let只能在声明它的作用域块中使用,在声明它的整个函数或全局函数中都使用as var。将前三个变量(函数和两个距离以及队列)更改为var应该可以解决这个问题。如果不改变它们,它们肯定都会改变

您应该检查let和var之间的差异

var pathFinder = (entranceX, entranceY, grid) => {
        var distanceFromTop = entranceX;
        var distanceFromLeft = entranceY;

        let location = {
            distanceFromTop: distanceFromTop,
            distanceFromLeft: distanceFromLeft,
            path: [],
            status: 'Start'
        }


        console.log('start', location)

        var queue = [];
        queue.push(location);
        console.log('queue', queue)
}

Let只能在声明它的作用域块中使用,在声明它的整个函数或全局函数中都使用as var。将前三个变量(函数和两个距离以及队列)更改为var应该可以解决这个问题。如果不改变它们,它们肯定都会改变

看起来推送正在工作,但记录时未显示阵列 整个物体

queue.push(location);
console.log("queue", queue[0]);
队列{distanceFromTop:1,distanceFromLeft:1,路径:数组(0),状态:“开始”}

如果将控制台更改为

console.log("queue", Array.from(queue));

您也可以看到数组的内容。

看起来推送正在工作,但在记录时未显示数组 整个物体

queue.push(location);
console.log("queue", queue[0]);
队列{distanceFromTop:1,distanceFromLeft:1,路径:数组(0),状态:“开始”}

如果将控制台更改为

console.log("queue", Array.from(queue));


您也可以看到数组的内容。

对其进行了测试,结果似乎很好。确定您正在执行它,我的意思是您只是在该范围内设置队列变量,而没有返回它。您是如何调用此函数的?您能否向我们提供有关您如何退出以及您试图在何处访问队列的更多信息。我通过单击按钮来执行此函数。在路径算法中,队列用于存储更多的位置。然而,我传递给下一个函数的队列基本上是空的,即使它是空的shouldnt@MazMat,请将所有let关键字更改为var并重试。我在上测试时,您的代码不起作用。当我把所有的都改成var时,效果很好。我得到了
start{distanceFromTop:23,distancefromtleft:56,路径:[],状态:'start'}队列[{distanceFromTop:23,distancefromtleft:56,路径:[],状态:'start'}]
结果。对它进行了测试,看起来很好。确定您正在执行它,我的意思是您只是在该范围内设置队列变量,而没有返回它。您是如何调用此函数的?您能否向我们提供有关您如何退出以及您试图在何处访问队列的更多信息。我通过单击按钮来执行此函数。在路径算法中,队列用于存储更多的位置。然而,我传递给下一个函数的队列基本上是空的,即使它是空的shouldnt@MazMat,请将所有let关键字更改为var并重试。我在上测试时,您的代码不起作用。当我把所有的都改成var时,效果很好。我得到了
start{distanceFromTop:23,distancefromtleft:56,路径:[],状态:'start'}队列[{distanceFromTop:23,distancefromtleft:56,路径:[],状态:'start'}]
。将代码中的所有内容都更改为var。对其行为没有任何更改。我使用react与此有关系吗?也许不应该,但我现在完全迷路了,可能是你传递变量的时候。当我在本机JavaScript编译器上测试它并手动运行该函数时。它按预期工作。也许发布更多的代码,我们可能会提供帮助。您的代码中的其他地方可能有错误。-另外,为了引用我使用的数组队列[0]而不是队列[location],我将为此准备codepen实例,因为我有2个文件。相关代码在findTest()函数的maze.js中。可能会有点混乱,因为在我尝试这个寻路算法之前,我尝试了很多不同的东西。网格在沙箱中似乎没有正确渲染,但除此之外,我的机器上的一切都是一样的。完全相同的conosle输出too@MazMatfindTest从未在您提供的代码中实际运行。这可能就是为什么?将代码中的所有内容都更改为var的原因。它的行为方式没有更改。我使用react与此有关系吗?也许不应该,但我现在完全迷路了,可能是你传递变量的时候。当我在本机JavaScript编译器上测试它并手动运行该函数时。它按预期工作。也许发布更多的代码,我们可能会提供帮助。您的代码中的其他地方可能有错误。-另外,为了引用我使用的数组队列[0]而不是队列[location],我将为此准备codepen实例,因为我有2个文件。相关代码在findTest()函数的maze.js中。可能会有点混乱,因为在我尝试这个寻路算法之前,我尝试了很多不同的东西。网格在沙箱中似乎没有正确渲染,但除此之外,我的机器上的一切都是一样的。完全相同的conosle输出too@MazMatfindTest从未在您提供的代码中实际运行。这就是为什么?嗯,你是对的,但为什么会是这样?在显示庞大的对象数组时,我从来没有遇到过这样的问题。console.log(“queue”,Array.from(queue));看到所有的内容嗯,你是对的,但为什么会是这样?在显示庞大的对象数组时,我从来没有遇到过这样的问题。console.log(“queue”,Array.from(queue));查看数组的所有内容