我已经创建了具有某种默认值的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);
});
拨打(浅)复制:'结果[i] [j] = value.slice();' – 2013-03-26 00:25:19
将它与每一种类型的值参数的工作?字符串/多维数组等? – OPOPO 2013-03-26 00:26:26
对于您需要创建数组 – 2013-03-26 00:27:19