【发布时间】:2017-12-30 16:51:34
【问题描述】:
我正在尝试编写一个函数,该函数从多维数组 (myArray) 中选择一个随机条目,将其保存到一个新变量 (myTempArray) 并使用 id 号 (计数器) 更新第一个条目。
当我更改 mytempArray[0][0][0] 的值时,它也会更新 myArray 中的等效值。我不希望这些值改变。
如何阻止这种情况发生?切片是错误的使用方法吗?如果是这样,我如何复制原始数组条目以便我可以修改它并在其他地方使用?代码如下:
var myArray = [
[[0, "Description 1", 0, 0, 1, 6, 0, 0, 0, true, 0]],
[[0, "Description 2", 0, 0, 1, 6, 0, 0, 0, true, 0]],
[[0, "Description 3", 0, 0, 1, 6, 0, 0, 0, true, 0]],
];
function randomNumber (min, max) {
return Math.floor((Math.random() * max) + min);
};
counter = 1;
function myfunction(){
myrand = randomNumber(0,myArray.length-1);
mytempArray = myArray.slice(myrand,myrand+1);
mytempArray[0][0][0] = counter;
counter++;
};
myfunction();
【问题讨论】:
-
数组是引用类型。
slice只做一个浅克隆,嵌套数组通过引用复制到新的。 -
查看这里了解如何深度复制数组。 stackoverflow.com/questions/597588/…
-
除了
Object.assign(),您还可以使用...[]扩展运算符。 -
@ThirueswaranRajagopalan:传播和休息都是语法,而不是运算符。
-
@ThirueswaranRajagopalan ...而且没有人做深度克隆。
标签: javascript arrays