拼接也影响初始阵列

时间:2016-03-08 14:38:09

标签: javascript arrays

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

所以,如果我有[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);

5 个答案:

答案 0 :(得分:1)

检查以下内容:

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

<div class="hideMe1">
  I'll fade first
</div>
<div class="hideMe2">
  My turn to fade
</div>

@keyframes hideMe{ 0% {opacity :1;} 10% {opacity :0;} 90% {opacity: 0;} 100% {opacity: 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); 数组的副本。

选项2 不要修改初始数组,而是使用[].concat(initial)方法

initial

答案 1 :(得分:1)

你可以这样做

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

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

分割数组时,有两种原型方法:

  • 拼接:影响原始数组的破坏性版本。
  • 切片:纯版本,返回新数组而不会影响其运行的数组。

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

只需将您使用拼接替换为切片,就可以了。

有关详细信息,我邀请您咨询优秀的MDN document for Array.spliceMDN document for Array.slice

答案 4 :(得分:0)

执行var half = initial;时,您只传递引用,而不是复制数组。 您需要使用其他方法来复制数组,例如:

var half = initial.slice();