Javascript 拼接也会影响初始阵列

Javascript 拼接也会影响初始阵列,javascript,arrays,Javascript,Arrays,我想将我的数组一分为二,并将结果保存在另一个数组中,但不影响原始数组 因此,如果我有[1,3,9,5],我希望将它保存在一个变量中。 然后我将创建新的数组并复制其中的初始数组。 然后我会将新阵列一分为二 意思是最后我会有2个这样的数组 var initial = [1,3,9,5]; var half = initial.slice(0, Math.floor(initial.length / 2)); console.log(initial); console.log(half);

我想将我的数组一分为二,并将结果保存在另一个数组中,但不影响原始数组

因此,如果我有
[1,3,9,5]
,我希望将它保存在一个变量中。 然后我将创建新的数组并复制其中的初始数组。 然后我会将新阵列一分为二

意思是最后我会有2个这样的数组

var initial = [1,3,9,5];

var half = initial.slice(0, Math.floor(initial.length / 2));

console.log(initial); 
console.log(half);  
问题是,初始值也被拆分,我得到2个数组,每个数组包含一半的值

var初始值=[1,3,9,5];
var半=初始值;
一半=一半拼接(0,数学地板(一半长度/2));
控制台日志(首字母);

控制台日志(一半)当您执行
var half=initial时只传递引用,不复制数组。
您需要使用其他方法来复制数组,例如:

var half = initial.slice();
检查以下各项:

选项1创建初始数组的副本

var initial = [1,3,9,5];

var half = [].concat(initial);

half = half.splice(0, Math.floor(half.length / 2));

console.log(initial);
console.log(half);
[].concat(初始)
允许创建
初始
数组的副本

选项2不修改初始数组,而是使用
slice
方法

var initial = [1,3,9,5];

var half = initial.slice(0, Math.floor(half.length / 2));

console.log(initial);
console.log(half);

你可以这样做

var initial = [1,3,9,5];

var half = initial.slice(0, Math.floor(initial.length / 2));

console.log(initial); 
console.log(half);  
initial
的引用复制到
half
。它们是相同的数组

使用
var half=initial.slice()复制数组的值或立即使用

var initial = [1, 3, 9, 5];
var half = initial.slice(0, Math.floor(initial.length / 2));

拆分阵列时,有两种原型方法:

  • 拼接:影响原始阵列的破坏性版本
  • 切片:纯版本,返回新数组而不影响其操作的数组
var half=initial.slice(0,数学层(half.length/2))

只要用切片替换使用拼接,就可以了


有关更多信息,我请您参考优秀的和

拼接是破坏性的,切片不是。我是通过艰苦的方式学会的。我想这里有很多答案把这两个人弄糊涂了。我知道我知道。虽然你的选择1有效。。。当普通锤子(
切片
)最合适时,感觉就像使用大锤一样。“使用
concat+splice
基本上是在模仿
slice
,但效率较低。”塞巴斯蒂安尼尔同意。显示这两个选项是为了更好地理解问题。确保
slice()
是正确的方法。
var initial = [1, 3, 9, 5];
var half = initial.slice(0, Math.floor(initial.length / 2));