2012-08-14 112 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