使用Javascript切片更新旧值

时间:2017-12-30 16:51:35

标签: javascript arrays

我正在尝试编写一个从多维数组(myArray)中选择随机条目的函数,将其保存到新变量(myTempArray)并使用id号(计数器)更新第一个条目。

当我更改mytempArray [0] [0] [0]的值时,它也会更新myArray中的等效值。我不希望这些值发生变化。

如何阻止这种情况发生?切片是错误的使用方法吗?如果是这样,我如何复制原始数组条目,以便我可以修改它并在别处使用?代码如下:

util

1 个答案:

答案 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++;
}

请参阅下文,了解我在那里做的其他几项更改。

几个旁注:

  • 除非您在某个地方宣布myrandmytempArray,否则您的代码将成为The Horror of Implicit Globals *的牺牲品。请务必声明您的变量。
  • 在函数声明的末尾不需要;(而不是函数表达式)。 ;是一个语句终止符。声明不是陈述。

* (这是我贫穷的小博客上的帖子)