抱歉,如果这太基本了,但我正在努力在 JavaScript 中定义 4 维数组(大小为 6x6x6x6)并将其初始化为全 1。最简单的方法是什么?
谢谢!
您可以使用文字语法,但它会非常庞大且繁琐。您可能想尝试这样的事情:
var x = [1, 1, 1, 1, 1, 1];
for (var i = 1; i < 4; i++) {
x = [x, x, x, x, x, x];
}
我找到了一个稍微简单的解决方案:
var x = 1;
for (var i = 0; i < 4; i++) {
x = [x, x, x, x, x, x];
}
Seems like there should be easier way, but this will do it.
var array = [];
for(var i=0; i<6; i++) {
for(var j=0; j<6; j++) {
for(var k=0; k<6; k++) {
for(var l=0; l<6; l++) {
array[i][j][k][l]=1;
}
}
}
}
Edit
To generate an n-dimensional AxBxCxDx... array (untested):
Array.prototype.fill = function(elem, n) {
for(var i=0; i<n; i++, this.push(elem));
}
function generateArray() {
var dimensions = Array.prototype.slice.call(arguments);
var x = 1;
for (var i = dimensions.length-1; i >= 0; i--) {
x = [].fill(x, dimensions[i]);
}
return x;
}
to generate a 2x3x4x5 matrix:
generateArray(2,3,4,5);
我实现了 ddlshack 的通用方法,但由于数组在 JavaScript 中是“通过引用传递”这一事实而遇到了一个问题。这导致数组的每个维度都持有对同一个数组的多个引用,而不是它的副本。为了纠正这个问题,我实现了如下解决方案(唯一的区别是我使用了第二个函数而不是修改 Array 的原型)。
var fillArray = function(val, dim) {
var a = [];
for (var i = 0; i < dim; i++) {
if (Object.prototype.toString.call(val) === "[object Array]") {
val = val.slice(0);
}
a.push(val);
}
return a;
};
var generateArray = function() {
var dimensions = Array.prototype.slice.call(arguments),
val = 0;
for (var i = (dimensions.length - 1); i >= 0; i--) {
val = fillArray(val, dimensions[i]);
}
return val;
};