我正在尝试编写一个从多维数组(myArray)中选择随机条目的函数,将其保存到新变量(myTempArray)并使用id号(计数器)更新第一个条目。
当我更改mytempArray [0] [0] [0]的值时,它也会更新myArray中的等效值。我不希望这些值发生变化。
如何阻止这种情况发生?切片是错误的使用方法吗?如果是这样,我如何复制原始数组条目,以便我可以修改它并在别处使用?代码如下:
util
答案 0 :(得分:0)
请记住,slice
仅适用于您的结构中的一个级别。如果您想要深副本,则必须自己实现。
function myfunction() {
var myrand = randomNumber(0, myArray.length - 1);
var mytempArray = myArray.slice(myrand, myrand + 1); // <== Only copies one level
mytempArray[0] = mytempArray[0].slice(); // <== Copy the next
mytempArray[0][0] = mytempArray[0][0].slice(); // <== And the next
mytempArray[0][0][0] = counter;
// Presumably do something with `mytempArray` or return it
counter++;
}
请参阅下文,了解我在那里做的其他几项更改。
几个旁注:
myrand
和mytempArray
,否则您的代码将成为The Horror of Implicit Globals *的牺牲品。请务必声明您的变量。;
(而不是函数表达式)。 ;
是一个语句终止符。声明不是陈述。* (这是我贫穷的小博客上的帖子)