在重复的字符串数组中,为什么替换副本中的文本会改变原始字符串?

时间:2015-07-07 05:08:12

标签: javascript arrays

我在js中进行心理学实验。我有一个字符串数组,我替换其中两个字符串中的文本。数组根据我想要的参与者的输入而改变。所以我有原始数组Array1,它包含一些占位符值,以及一个包含我希望参与者看到Array2的值的重复数组。我使用.replace输入新值。很奇怪(或者也许只是我对js的理解),使用Array2[n].replace('placeholder', 'new text')替换两个数组中的占位符。这是一些复制问题的脚本(在Chrome中)。

Array1 = ['rhubarb', 'placeholder', 'rhubarb', 'rhubarb']
Array2 = Array1
Array2[1] = Array2[1].replace('placeholder', 'new text')

Array1

["rhubarb", "new text", "rhubarb", "rhubarb"]

使用Array2 = Array1.slice()消除了这个问题,因此我猜Array2 = Array1只指向Array1而不是复制它。为什么Array2 = Array1允许对Array2进行修改以引导参考链,可以这么说呢?

我确定这是相当基本的,但我不是程序员。提前谢谢!

2 个答案:

答案 0 :(得分:1)

问题实际上是两个数组指向相同的数据;我的意思是他们不包含单独的值。要复制旧数组的值,最好使用.slice方法。看起来像这样

Array2 = Array1.slice() Array2[1] = Array2[1].replace('placeholder', 'new text');

答案 1 :(得分:0)

javascript中的数组也是一个对象。对象被视为引用。基本上他们指向同一条数据。合乎逻辑的结果是,如果你修改一个,它会影响另一个。

如果要创建克隆(独立副本)以避免此类行为,您可能需要参考this question有关如何复制数组的信息。它有很多答案。