在JavaScript中制作反向数组的独立副本

Making an independent copy of a reversed array in JavaScript

这里是我的小提琴:http://jsfiddle.net zgu9j sepoto / / 1 / /

我开始与一个反函数:

1
2
3
4
5
6
7
8
9
10
11
function reverseArr(input) {
    var ret = new Array;
    for(var i = input.length-1; i >= 0; i--) {
        ret.push(input[i]);
    }

    //I tried changing the return value to
    //return ret.slice(0) which has no effect on making
    //an independent copy
    return ret;
}

第二阵列组成一pointorigins2 pointorigins1拷贝是不独立的。换句话说,是调节性pointorigins2 pointorigins1是不是我需要实现。从我的阅读,我想上一个期权计算器使用一层或如使用的回路不工作,但似乎没有,所以我做了一个小提琴。

有没有办法让独立的反相阵列复制?


您正在创建一个新的独立数组,但您没有创建填充数组的项的独立副本。你需要做如下的事情:

1
2
3
4
5
6
7
8
9
10
11
12
function reverseArr(input) {
    var ret = new Array;
    for(var i = input.length-1; i >= 0; i--) {
        ret.push({
            positionx: input[i].positionx,
            positiony: input[i].positiony,
            index: input[i].index
        });
    }

    return ret;
}

以便生成新对象(具有相同属性)和新数组。


使用此功能

1
2
3
4
5
6
7
function reverseArray(input) {
var newArray = new Array();
for(var i = input.length-1; i >= 0; i--) {
    newArray.push(input[i]);
   }
   return newArray;
}


您所要做的就是在反转阵列之前克隆它!:)

最短的输入方式是:

1
var b = a.slice();

但使用concat也是正确的。见:

javascript复制数组的最快方法-切片vs for循环

如果slice不为您创建副本,则可以使用numpy数组并通过以下方式创建深度副本:

1
np.copy(a);

参见:http://docs.scipy.org/doc/numpy/reference/generated/numpy.copy.html


1
2
3
function reverseArr(input) {
    return input.slice().reverse();
}


您的函数工作正常,即使它可以缩写为

1
return input.slice().reverse();

1
2
3
//This will show that pointOrigins2 is not an independent copy of pointOrigins1
//When pointOrigins2 is modified pointOrigins1 is also being modified
pointOrigins2[0].index++;

不,您没有在这里修改pointOrigins2数组,您只访问它并修改点对象—与pointOrigins1数组中的点相同。然而,以东十一〔二〕年。

您可以修改独立于其他数组的数组,例如

1
2
3
4
5
pointOrigins2[0] = {
    positionx: pointOrigins2[0].positionx,
    positiony: pointOrigins2[0].positiony,
    index:     pointOrigins2[0].index + 1
};

而江户十一〔一〕将保持原样。因此,如果您希望有点的属性可以修改而不被反射到其他地方,则需要创建新点。