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));