jiddle - 我有x*y array
一些默认创建的函数value
。我希望这个值是一些 2 长的数组。但似乎通过传递new Array(2)
,因为parameter
它总是传递相同的对象,所以稍后更改数组中的任何单元格都会影响所有单元格。如何使这个数组default
的每个单元格的每个值都相同,但independent
也一样。
在小提琴上,我更改了某些字段的值并警告依赖于第一个字段的其他字段,因为每个单元格都具有作为同一对象的默认值。
jiddle - 我有x*y array
一些默认创建的函数value
。我希望这个值是一些 2 长的数组。但似乎通过传递new Array(2)
,因为parameter
它总是传递相同的对象,所以稍后更改数组中的任何单元格都会影响所有单元格。如何使这个数组default
的每个单元格的每个值都相同,但independent
也一样。
在小提琴上,我更改了某些字段的值并警告依赖于第一个字段的其他字段,因为每个单元格都具有作为同一对象的默认值。
我有创建
x*y
具有一些默认值的数组的函数。我希望这个值是一些 2 长的数组
但是它不再是一个x*y
二维数组,而是一个x*y*2
3 维数组!为此,您需要一个不同的功能。
似乎通过
new Array(2)
作为参数传递它总是传递相同的对象,因此稍后更改数组中的任何单元格都会影响所有单元格。
是的。new Array(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);
});