2016-02-10 64 views
0

我有两个数组,我想将一些值从一个复制到另一个,特别是这些值的索引大于第一个数组的长度。复制数组长度的整数值

var arr1 = [1,2,3]; 

var arr2= [1,2,3,4,5,6,7]; 

如果我这样做:

var length = arr1.length; 

for(var i = length; i < arr2.length; i++){ 
    arr1.push(arr2[i]); 
} 

我猜想那i将initalized,然后将该长度值将不会被如此重新即使长度变化ARR1变化,不会物。

但我的问题是,为了减轻任何潜在的错误,我可以将arr1.length的值复制到一个新变量中。

所以我能做到这一点:

var length = JSON.parse(JSON.stringify(arr1.length)); 

for(var i = length; i < arr2.length; i++){ 
    arr1.push(arr2[i]); 
} 

也许更简单:

var length = Number(arr1.length); 

for(var i = length; i < arr2.length; i++){ 
    arr1.push(arr2[i]); 
} 

我的问题是最终 - 我如何从一个数组的当前长度复制值,并将其存储在独立的变量不会改变?

+3

分配的原始值,使值的副本,而不是引用。所以你不必做任何事情。 – nnnnnn

+0

你的第一个例子本身工作正常.. –

+3

你为什么不用'concat'和'slice'来实现你的目标?你可以用'arr1.concat(arr2.slice(arr1.length));' – Georg

回答

0

最简单的方法是使用array.slice

var arr1 = [1,2,3]; 

var arr2= [1,2,3,4,5,6,7]; 

console.log(arr2.slice(arr1.length)); // [4, 5, 6, 7] 
+1

*'代替循环 - 我的问题最终是 - 我怎样才能从数组的当前长度复制值并将其存储在单独的变量中, t变化?“* – nnnnnn

+0

即使arr1的长度在此步骤后发生变化,并且除非'长度'值被重新分配,var length = arr1.length也不会改变。 例如 VAR ARR1 = [1,2,3] 变种LEN = arr1.length 的console.log(LEN)//将打印3 arr1.push(4) 的console.log(LEN)//仍将打印3 –

-1

我会做出西莫恩德雷的ANS一些变化

var l1 = arr1.length, l2 = arr2.length 

if (l1 < l2) { 
    arr1 = arr1.concat(arr2.slice(l1)) 
} else { 
    arr2 = arr2.concat(arr1.slice(l2)) 
}