2012-08-14 74 views
0

我有一個3D數組,我想將它的另一個副本放入另一個數組中。複製3D陣列

直接賦值會將字符串返回給新數組而不是3D數組。

foo = [] //3D array; 
boo = foo //boo becomes a string 

任何想法如何做到這一點?

編輯: 這是代碼

Background.js

function onRequest(request, sender, sendResponse) { 
localStorage = request.mes; // mes is an array 
}; 
chrome.extension.onMessage.addListener(onRequest); 
+2

一個字符串到新的數組?你的意思是參考?要複製數組,有各種方法,包括'boo = foo.slice();'(=淺拷貝)。如果你想深入複製,遞歸循環遍歷數組),或者使用'bar = JSON.parse(JSON.stringify(foo));'(注意:僅適用於JSON序列化對象)。相關/重複:http://stackoverflow.com/q/10941695 – 2012-08-14 09:15:31

+0

我不希望新變量是字符串,我希望它只是另一個是數組,我試過切片方法,但它只適用於2D array @assylias好吧,你可以試試看,併發布你的代碼 – 2012-08-14 09:16:48

+0

@RobW它沒有工作...即時通訊使用谷歌瀏覽器擴展,但... – 2012-08-14 09:22:17

回答

0

你可能會使用這個clone.Try,

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

Array.prototype.clone = function() { 
    var arr = []; 
    for(var i = 0; i < this.length; i++) { 
//  if(this[i].constructor == this.constructor) { 
     if(this[i].clone) { 
      //recursion 
      arr[i] = this[i].clone(); 
      break; 
     } 
     arr[i] = this[i]; 
    } 
    return arr; 
} 

var b = a.clone() 

console.log(a); 
console.log(b); 

b[2][0] = 'a'; 

console.log(a); 
console.log(b); 
+0

試過,甚至之前甚至發佈在這裏:s ... – 2012-08-14 09:45:00

+0

它是否適合你? – pdpMathi 2012-08-14 09:47:43

+0

不是真的...沒有 – 2012-08-14 09:50:11

0

一個解決方案,我已經找到了依靠關於使用jQuery,希望這不會是一個問題?

var a1 = ['test', ['a','b',1], [[1,2,3],[4,5,6]]]; 
console.log(a1); 
var a2 = jQuery.extend(true, {}, a1); 
a1[0] = 'test - changed'; 
console.log(a1); 
console.log(a2); 

小提琴:http://jsfiddle.net/gRoberts/AhKNx/

只需設置var a2 = a1;僅僅創建與原始對象的引用,導致a2[0]改變到test - changed;

看看你的控制檯(在Firefox/Chrome的F12)看到從我的小提琴輸出;)

希望幫助?

Gavin