无法将对象推送到数组

时间:2018-05-26 14:07:06

标签: javascript arrays

我有这个简单的代码

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)
}

我确保“位置”不为空,它在控制台中显示为:

“start {distanceFromTop:1,distanceFromLeft:0,path:Array(0),status:”Start“}”

但是当我想将它添加到队列中时,我最终看起来像一个空数组,但长度为0

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

我错过了一些明显的东西吗?试图通过队列[位置]添加它,但它也没有工作

2 个答案:

答案 0 :(得分:1)

您应该检查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)
}

我们只能在声明它的范围块中使用它在整个声明的函数或全局函数中的var。将前三个(函数和两个距离以及队列)变量更改为var应该为您解决此问题。如果不改变它们肯定会。

答案 1 :(得分:1)

看起来推送正在工作但是在记录时没有显示数组  整个对象

queue.push(location);
console.log("queue", queue[0]);

queue {distanceFromTop:1,distanceFromLeft:1,path:Array(0),status:" Start"}

如果您将控制台更改为,

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

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