Javascript 2D数组奇怪的行为

时间:2016-07-26 06:08:45

标签: javascript arrays matrix

我正在使用javascript数组编写代码,但我遇到了一个小问题。

我正在运行我为'蛇'创建的'init'函数,但输出对我来说有点奇怪。我确定那是因为我是javascript的新手。任何人都可以向我解释发生了什么事吗?如何让代码生成所需的输出?

var snake = {
    direction : null,
    head : null,
    queue : null,

    init: function(){
        this.direction = RIGHT;
        this.queue = []; // 2D ARRAY
        this.head = []; // 1D ARRAY

        this.insert([1,10]);
        this.insert([2,20]);
        this.insert([3,30]);
    },

    insert: function(x,y){
        this.queue.unshift([x,y]); // INSERTS [X,Y]
        this.head = this.queue[0];

        console.log(this.head + "T0"); // prints: 1,10 T0
        console.log(this.head[0] + " T1 "); // prints: 1,10 T1 
        console.log(this.head[1] + " T2 "); // prints: undefined T2 

        /*
            I was expecting (DESIRED OUTPUT):

            this.head to print 1,1

            this.head[0] to print 1

            this.head[1] to print 10

        */ 

    }

1 个答案:

答案 0 :(得分:2)

你的函数insert有两个参数;一个用作第一个值,一个用作数组中的第二个值以取消移动到queue。在调用函数时,你只传递一个参数(数组[1,10]),它在未移位时可以用作第一个元素,第二个元素将是未定义的。

要解决您的问题,请使用this.insert(1,10);调用您的函数,或将函数更改为只接受一个参数,然后this.queue.unshift(x);