我想将我的数组分成两半并将其结果保存在另一个数组中,但不影响原始数组。
因此,如果我有[1,3,9,5]
,我想将其保存在变量中。然后我会创建一个新数组并复制其中的初始数组。然后我会把这个新数组分成两半。
意思是最终我会有 2 个这样的数组
initial [1,3,9,5] halved [1,3]
问题是最初的一个也被拆分了,我得到了 2 个数组,每个数组都包含一半的值。
var initial = [1,3,9,5];
var half = initial;
half = half.splice(0, Math.floor(half.length / 2));
console.log(initial);
console.log(half);
var half = initial;
将initial
的引用复制到half
。它们是同一个数组。
要么用 var half = initial.slice();
复制数组的值,要么立即得到一半
var initial = [1, 3, 9, 5];
var half = initial.slice(0, Math.floor(initial.length / 2));
你可以这样做
var initial = [1,3,9,5];
var half = initial.slice(0, Math.floor(initial.length / 2));
console.log(initial);
console.log(half);
检查以下内容:
选项 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(initial)
允许创建initial
数组的副本。
选项 2 不修改初始数组,但使用slice
方法
var initial = [1,3,9,5];
var half = initial.slice(0, Math.floor(half.length / 2));
console.log(initial);
console.log(half);
拆分数组时,有两种原型方法:
- 拼接:影响原始数组的破坏性版本。
- slice:纯版本,它返回一个新数组,而不会影响它所操作的数组。
var half = initial.slice(0,Math.floor(half.length / 2));
只需用切片代替拼接的使用,您就可以开始了。
欲了解更多信息,我邀请您查阅 Array.splice 的优秀 MDN 文档和 Array.slice 的 MDN 文档
当你做var half = initial;
时,你只传递一个引用,而不是复制一个数组。您需要使用其他方法来复制数组,例如:
var half = initial.slice();