2014-01-26 45 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