2013-03-26 89 views
0

jiddle - 我已经创建了x*y array函数,其中一些默认值为value。我想这个值是一些数组2长。但它似乎通过传递new Array(2)作为parameter它总是传递相同的对象,所以稍后更改数组中的任何单元格影响所有它们。如何使此阵列的每个单元的每个default值都相同,但是也是independentJS与函数参数相同的对象

在FIDLE我改变一些领域和报警等领域依赖于第一个,因为每个单元的值具有默认值相同的对象。

+0

拨打(浅)复制:'结果[i] [j] = value.slice();' – 2013-03-26 00:25:19

+0

将它与每一种类型的值参数的工作?字符串/多维数组等? – OPOPO 2013-03-26 00:26:26

+0

对于您需要创建数组 – 2013-03-26 00:27:19

回答

1

我已经创建了具有某种默认值的x*y数组的函数。我想这个值是一些阵列2长

但那就不是一个x*y 2维数组了,而是一个x*y*2 3维数组!为此,你需要一个不同的功能。

它似乎通过传递new Array(2)作为参数它总是传递相同的对象,所以稍后更改数组中的任何单元格影响所有这些。

是的。 new Array(2)创建一个对象,并且您的代码构造与每一个字段指向它的2维阵列。

如何让他们独立?

你需要使用不同的功能,如

function newB(x, y, z) { 
    var result = new Array(x); 
    for (var i=0; i<x; i++) { 
     result[i] = new Array(y); 
     for (var j=0; j<y; j++) { 
      result[i][j] = new Array(z); 
     } 
    } 
    return result; 
} 

var fields = newA(5, 5, 2); 

或者使其更一般情况下,你可以使用一些工厂函数作为一个参数,它构建了独立值:

function newB(x, y, valuemaker) { 
    if (typeof valuemaker != "function") { 
     var value = valuemaker || 0; 
     valuemaker = function(){ return value; }; 
    } 
    var result = new Array(x); 
    for (var i=0; i<x; i++) { 
     result[i] = new Array(y); 
     for (var j=0; j<y; j++) { 
      result[i][j] = valuemaker(); 
     } 
    } 
    return result; 
} 

var fields = newA(5, 5, function() { 
    return new Array(2); 
}); 
相关问题