2013-07-28 24 views
7
khác

Tôi có hai mảng:Làm một mảng chính xác bằng

var array1 = [1, 2, 3]; 
var array2 = [4, 5, 6]; 

Tôi muốn mảng 1 là chính xác bằng mảng 2. Tôi đã nói với tôi có thể không chỉ đơn giản làm:

array1 = array2; 

Nếu tôi không thể làm điều này, làm thế nào tôi có thể làm cho mảng1 bằng array2?

Cảm ơn

+4

'array1 = array2.slice (0) '? – DCoder

+0

@DCoder Nếu đó là câu trả lời cho câu hỏi của tôi, tại sao không gửi câu trả lời đó? : P – jskidd3

+0

Tại sao bạn không thể thực hiện 'mảng1 = mảng2;'? –

Trả lời

12

Nếu bạn chỉ cần một bản sao của các phần tử của một mảng bạn chỉ có thể sử dụng miếng như thế này:

a = [1,2,3] 
copyArray = a.slice(0) 
[1 , 2 , 3] 

đối với lý do tại sao bạn không nên sử dụng assignement đây nhìn vào ví dụ này:

a = [1,2,3] 
b = a 
a.push(99) 
a 
[1,2,3,99] 
b 
[1,2,3,99] 

Nếu bạn sao chép một mảng bạn không có vấn đề này:

a = [1,2,3] 
b = a.slice(0) 
a.push(888) 
a 
[1,2,3,888] 
b 
[1,2,3] 
+0

Điều này có tác dụng chính xác giống như làm 'copyArray = a'? – jskidd3

+0

Cảm ơn bạn đã chỉnh sửa. Câu trả lời chính xác! – jskidd3

+0

Tôi đã trích dẫn câu trả lời của mình để hiển thị sự khác biệt –

0

Đối với một bản sao sâu của mảng của bạn, làm điều này (REFERENCE):

function deepCopy(obj) { 
    if (Object.prototype.toString.call(obj) === '[object Array]') { 
     var out = [], i = 0, len = obj.length; 
     for (; i < len; i++) { 
      out[i] = arguments.callee(obj[i]); 
     } 
     return out; 
    } 
    if (typeof obj === 'object') { 
     var out = {}, i; 
     for (i in obj) { 
      out[i] = arguments.callee(obj[i]); 
     } 
     return out; 
    } 
    return obj; 
} 
0

này sẽ làm các trick:

var clone = originalArray.slice(0); 
+0

Điều này có giống như làm clone = originalArray không? – jskidd3

Các vấn đề liên quan