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++;
号
不,您没有在这里修改
您可以修改独立于其他数组的数组,例如
1 2 3 4 5 | pointOrigins2[0] = { positionx: pointOrigins2[0].positionx, positiony: pointOrigins2[0].positiony, index: pointOrigins2[0].index + 1 }; |
而江户十一〔一〕将保持原样。因此,如果您希望有点的属性可以修改而不被反射到其他地方,则需要创建新点。