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'] ]