2012-02-22 53 views
5

Tôi đang cố gắng tạo một hàm sao chép một mảng các mảng. Tôi đã thử blah.slice (0); nhưng nó chỉ sao chép các tham chiếu. Tôi cần tạo một bản sao để nguyên bản gốc.Cách sao chép hoặc sao chép một mảng các mảng

tôi thấy phương pháp mẫu thử nghiệm này tại http://my.opera.com/GreyWyvern/blog/show.dml/1725165

Object.prototype.clone = function() { 
    var newObj = (this instanceof Array) ? [] : {}; 
    for (i in this) { 
    if (i == 'clone') continue; 
    if (this[i] && typeof this[i] == "object") { 
     newObj[i] = this[i].clone(); 
    } else newObj[i] = this[i] 
    } return newObj; 
}; 

Nó hoạt động, nhưng messes lên một plugin jQuery Tôi đang sử dụng - vì vậy tôi cần bật nó lên một chức năng ... và đệ quy không phải là của tôi mạnh nhất.

Trợ giúp của bạn sẽ được đánh giá cao!

Chúc mừng,

+1

Hãy chắc chắn để tuyên bố "tôi" với 'var'! Cũng rất nguy hiểm khi lặp qua một mảng với vòng lặp 'for ... in' - an toàn hơn nhiều khi sử dụng các chỉ mục số. – Pointy

+0

Xem: http://stackoverflow.com/questions/565430/deep-copying-an-array-using-jquery –

Trả lời

5
function clone (existingArray) { 
    var newObj = (existingArray instanceof Array) ? [] : {}; 
    for (i in existingArray) { 
     if (i == 'clone') continue; 
     if (existingArray[i] && typeof existingArray[i] == "object") { 
     newObj[i] = clone(existingArray[i]); 
     } else { 
     newObj[i] = existingArray[i] 
     } 
    } 
    return newObj; 
} 
+0

Điều này làm việc hoàn hảo! Cảm ơn bạn. – Jeremy

+0

tuyệt vời. chính xác những gì tôi cần! – tuj

2

Ví dụ:

clone = function(obj) { 
    if (!obj || typeof obj != "object") 
     return obj; 
    var isAry = Object.prototype.toString.call(obj).toLowerCase() == '[object array]'; 
    var o = isAry ? [] : {}; 
    for (var p in obj) 
     o[p] = clone(obj[p]); 
    return o; 
} 

cải thiện theo ý kiến ​​

+1

Sẽ ngắt cho 'null' (null.pop sẽ ném). Kiểm tra đầu tiên phải giống như 'if (typeof obj! =" Object "||! Obj)'. –

+0

Ngoài ra, xử lý có vấn đề về các thuộc tính kế thừa - "sao chép" trong JavaScript có ngữ nghĩa có vấn đề. – Pointy

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