0

我试图从原始点导出网格上的 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受到影响?我应该tempArr以其他方式声明吗?

jsFiddle

4

1 回答 1

2

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

var tempArr = cords.slice(0);
于 2013-06-09T00:43:27.150 回答