我已經創建了具有某種默認值的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