不应修改的数组[重复]

Posted

技术标签:

【中文标题】不应修改的数组[重复]【英文标题】:Array that should not be modified [duplicate] 【发布时间】:2020-12-14 10:33:22 【问题描述】:

我有一个数组 (arr1),我将它推入另一个数组 (arr2)。 我用循环修改了'arr1',但最后,'arr2'也被修改了!为什么 ? 我想在开始时保持'arr2'相同。我的错误是什么?

arr1 = [1,2,3];
arr2 = [];
          
arr2.push(arr1);
              
$("#a1").html(arr1); // 1,2,3
$("#a2").html(arr2); // 1,2,3   

    // loop modifying ONLY 'arr1'... 
    for (i=0 ; i<arr1.length ; i++) 
        arr1[i] = arr1[i]*3;
    

$("#b1").html(arr1); // 3,6,9
$("#b2").html(arr2); // 3,6,9 ... ??..incomprehensible !
// 'arr2' should not be modified ! The result should be 1,2,3
// Why is 'arr2' still modified ?

【问题讨论】:

将一个数组推入另一个数组不会复制原始数组。您所做的只是使数组中的一个元素指向内存中的同一个数组。对子数组所做的任何更改都会反映在父数组中,因为它们都指向同一个内存空间。 好吧,我明白了。明确的答案......感谢和抱歉[重复],下次我会看起来更好...... :-) 【参考方案1】:

数组对象作为引用类型,你可以试试最新的es6扩展运算符arr2 = [...arr1];代替arr2.push(arr1);,否则切片方法arr2 = arr1.slice();

【讨论】:

明确的答案。感谢您的帮助。

以上是关于不应修改的数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

即使未显式修改数组值也已修改[重复]

不修改数组找出重复的数字

修改数组中的每个值[重复]

不修改数组找出重复的数字(c语言)

[题目2]不修改数组找出重复的数字

使用 setState 钩子修改数组 [重复]