我正在尝试从原始点在网格上得出4个点。这些包括左,右,下和上一个单位。

如果我从[4, 5]开始,我的输出应该是[3, 5] [5, 5] [4, 4] [4, 6]

我可能会查找如何执行此操作,但我一直在使用自己的方法,并且我认为我的逻辑是正确的,但是JavaScript本身存在一个简单的问题,当我声明var tempArr = cords;时,出来,对tempArr的任何更改似乎都在影响cords。我以前从未遇到过这个问题,这里是代码。

var output = [],
    cords = [4, 5];

var convertToCords = function(i){
    var tempArr = cords;
    var offset = ( ( i%2 ) * 2 ) - 1, // -1, 1, -1, 1
        index = Math.floor(i/2);      // 0, 0, 1, 1
    tempArr[index] = cords[index] + offset;
    return tempArr;
}

for (var i = 0; i < 4; ++i){
    console.log(cords);
    newCords = convertToCords(i);
    var x     =   newCords[0],
        y     =   newCords[1];
    array[i] = "[" + x + ", " + y + "]";
}
console.log(output);


tempArr[index] = cords[index] + offset;


问题:有人能发现为什么我对tempArr进行操作时也会受到影响吗?我应该以其他方式声明cords吗?

请参见jsFiddle

最佳答案

var tempArr = cords;是您的问题。 cordstempArr引用相同的数组对象,即使变量名称不同。您需要克隆原始数组:

var tempArr = cords.slice(0);

09-20 00:05