拼接也会影响初始阵列



我想将我的数组分成两半并将其结果保存在另一个数组中,但不影响原始数组。

因此,如果我有[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();

最新更新