Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么推动一个阵列会影响另一个阵列?_Javascript_Arrays - Fatal编程技术网

Javascript 为什么推动一个阵列会影响另一个阵列?

Javascript 为什么推动一个阵列会影响另一个阵列?,javascript,arrays,Javascript,Arrays,考虑以下代码段: var arr1=“john”拆分(“”); console.log(arr1);//['j','o','h','n'] var arr2=arr1.reverse(); console.log(arr1);//[n',h',o',j'] var arr3=“jones”。拆分(“”); arr2.推送(arr3); console.log(arr1);//['n','h','o','j',['j','o','n','e','s']您的代码上有两个对arr1的修改 var a

考虑以下代码段:

var arr1=“john”拆分(“”);
console.log(arr1);//['j','o','h','n']
var arr2=arr1.reverse();
console.log(arr1);//[n',h',o',j']
var arr3=“jones”。拆分(“”);
arr2.推送(arr3);

console.log(arr1);//['n','h','o','j',['j','o','n','e','s']
您的代码上有两个对arr1的修改

var arr2=arr1.reverse()

此函数用于反转在位的数组。这意味着
arr1
将自动反转

另外,在指定对象时,您只传递对它们的引用,因此
arr2
实际上是
arr1
(反转)在这一行之后

arr2.推送(arr3)

因为您指定了
arr2
作为对
arr1
的引用,所以在这一行中您实际上是在修改
arr1
,相当于编写
arr1.push(arr3)

要从数组创建新对象,可以使用函数,因为此方法返回数组的副本

var arr1=“john”拆分(“”);
console.log(arr1);//['j','o','h','n']
var arr2=arr1.slice().reverse();
console.log(arr1);//['j','o','h','n']
var arr3=“jones”。拆分(“”);
arr2.推送(arr3);

console.log(arr1);//['j','o','h','n']
对您的代码进行了两次修改
arr1

var arr2=arr1.reverse()

此函数用于反转在位的数组。这意味着
arr1
将自动反转

另外,在指定对象时,您只传递对它们的引用,因此
arr2
实际上是
arr1
(反转)在这一行之后

arr2.推送(arr3)

因为您指定了
arr2
作为对
arr1
的引用,所以在这一行中您实际上是在修改
arr1
,相当于编写
arr1.push(arr3)

要从数组创建新对象,可以使用函数,因为此方法返回数组的副本

var arr1=“john”拆分(“”);
console.log(arr1);//['j','o','h','n']
var arr2=arr1.slice().reverse();
console.log(arr1);//['j','o','h','n']
var arr3=“jones”。拆分(“”);
arr2.推送(arr3);
console.log(arr1);//['j','o','h','n']
JavaScript中的
reverse()
方法。这意味着它会更改
arr1
变量中的数据,然后返回对该数组的引用。因此,
arr2
只是对
arr1
的引用,而不是一组新的数据

如果您需要全新的数据,您可以按照以下方式操作:

这将
切片
一组新数据,然后将其反转,从而返回一个新数组,而不是对第一个数组的引用

例如:

var数组=['a','b','c','d','e'];
var notmutated=array.slice();
log('notmutated:',notmutated);
var mutated=array.reverse();
log('mutated:',array)JavaScript中的
reverse()
方法。这意味着它会更改
arr1
变量中的数据,然后返回对该数组的引用。因此,
arr2
只是对
arr1
的引用,而不是一组新的数据

如果您需要全新的数据,您可以按照以下方式操作:

这将
切片
一组新数据,然后将其反转,从而返回一个新数组,而不是对第一个数组的引用

例如:

var数组=['a','b','c','d','e'];
var notmutated=array.slice();
log('notmutated:',notmutated);
var mutated=array.reverse();
log('mutated:',array)
  • 函数的作用是:返回一个新数组
  • reverse()函数不返回新数组。所以,arr1就是arr2
  • push()函数不返回新数组。因此,arr1和arr2添加了arr3作为最后一个元素
  • 使用slice()函数制作数组的副本

    参考资料:

  • 函数的作用是:返回一个新数组
  • reverse()函数不返回新数组。所以,arr1就是arr2
  • push()函数不返回新数组。因此,arr1和arr2添加了arr3作为最后一个元素
  • 使用slice()函数制作数组的副本

    参考资料:


    “在上一个console.log中,为什么按arr2会影响arr3?”-它不会。最后一个日志记录的是
    arr1
    ,而不是
    arr3
    @nnnnnn我的一个编辑错误,修复了“在最后一个console.log中,为什么按arr2会影响arr3?”-它没有。最后一个日志记录的是
    arr1
    ,而不是
    arr3
    @nnnnnn我的编辑错误,已修复
    var arr2 = arr1.slice().reverse();
    
    var arr1 = "john".split('');  
    console.log(arr1); // [ 'j', 'o', 'h', 'n' ]
    var arr2 = arr1.slice().reverse(); 
    console.log(arr2); // [ 'n', 'h', 'o', 'j' ]
    var arr3 = "jones".split(''); 
    arr2.push(arr3);
    console.log(arr1);  // [ 'j', 'o', 'h', 'n' ]
    console.log(arr2);  // [ 'n', 'h', 'o', 'j', ['j','o','n','e','s'] ]