2014-01-26 75 views
1

为什么我无法从这些数组中删除第一项,以及为什么新数组模仿旧数组?为什么数组模拟彼此并重置自己?

(旧阵列插槽和端口,新的阵列是w和w_ports)

function pull(arr,val){ 
    for(var i = 0, j = 0, l = arr.length; i < l; i++){ 
     if(arr[i]!==val){ 
      arr[j++]=arr[i]; 
     } 
    } 
    arr.length=j; 
} 

var sockets = [1,2,3,4] 
    , ports[8002,8003,8004,8005]; 

console.log(sockets,ports); // [ [1,2,3,4] , [8002,8003,8004,8005] ] 
var m=sockets[0]; 
var m_port=ports[0]; 
var w=sockets; 
pull(w,w[0]); 

var w_ports=ports; 
pull(w_ports,w_ports[0]); 
console.log(w,w_ports);  // [ [2,3,4] , [8003,8004,8005] ] 

sockets.unshift(m); 
ports.unshift(m_port); 
console.log(sockets,ports); // [ [1,2,3,4] , [8002,8003,8004,8005] ] 
console.log(w,w_ports);  // [ [1,2,3,4] , [8002,8003,8004,8005] ] 

我想会留下插槽和端口不变,但是,W和w_ports失踪的第一个项目

UPDATE:感谢adeneoAkshat Singhal

console.log(sockets,ports); 
var m=sockets[0]; 
var m_port=ports[0]; 
var w=sockets.slice(1,sockets.length); 
var w_ports=ports.slice(1,ports.length); 
console.log(sockets,ports); 
console.log(w,w_ports); 

有人能把它的答案,所以我可以给打勾请...

+1

这是因为你没有创建数组副本,但只是添加引用的建议。声明一个新的数组,然后将值复制到它。 –

+1

好的,我会试试..如果你的权利不好,我不能打勾你 –

+3

'var w_ports = ports.slice();' – adeneo

回答

0

这是因为你没有创建数组副本,但只是添加引用。声明一个新的数组,然后将值复制到它。

或者,你可以使用var w_ports = ports.slice();通过adeneo