在构造函数中连接数组

时间:2018-10-05 03:01:44

标签: javascript arrays

我在连接数组时遇到了一些麻烦。不确定如何最好地举例说明这一点,但实质上,我希望每个新节点的迭代都从node.prevNodes中获取数组并将新数组推入具有先前内容的数组中。现在,它正在执行-sort--而不是多维数组,而是将所有值作为字符串放入数组中。有关更多详细信息,请参见下面的内容。

function node(posX, posY, numMoves, prevNodes){
    this.posX = posX;
    this.posY = posY;
    this.numMoves = numMoves;
    this.prevNodes = [prevNodes];
}

nodes = []; // all nodes
nodes.push( new node(1, 1, 0) ); // add starting node

while (nodes.length != 0) {
    currentPos = nodes.shift();
    for (i = 0; i < 8; i++) { 

        newArr = currentPos.prevNodes + [x, y]; /* I think this is the issue */
        nodes.push( new node(x, y, d+1, newArr) );

        // Example Ideal value for newArr (after some iteration):
        // [[3,2],[5,3],[7,4],[6,2],[8,1]]

        // Actual value:
        // ["3,25,33,42,6"]
    }
}

其余所有代码都是任意的,以便为发生的事情的基础提供一些上下文。我认为是newArr的创建方式或prevNodes参数的发送方式。困在这里...

1 个答案:

答案 0 :(得分:0)

所以我找到了解决方案,尽管我认为这不是理想的选择。这个问题在我怀疑的两个地方都有,并通过一些编辑得以解决:

function node(posX, posY, numMoves, prevNodes){
    this.posX = posX;
    this.posY = posY;
    this.numMoves = numMoves;
    this.prevNodes = prevNodes; // removed brackets here
}

nodes = []; // all nodes
nodes.push( new node(1, 1, 0, []) ); // added empty brackets to starting node parameter

while (nodes.length != 0) {
    currentPos = nodes.shift();
    for (i = 0; i < 8; i++) { 
        newArr = currentPos.prevNodes.concat([[x, y]]); // used concat & double wrapped in brackets
        nodes.push( new node(x, y, d+1, newArr) );
    }
}

老实说,我不确定为什么它能起作用(我从理论上理解,但实际上却不了解)。如果有人有更好的方法,我很想知道!