在JavaScript中,是否可以在一行代码中定义和初始化多维数组?
在JavaScript中,定义和初始化多维数组在一行代码中是否可能的问题,是由于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; };
在JavaScript中定义和初始化多维数组可以通过以下代码完成:
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; } } } }
以上代码通过嵌套循环创建了一个4维数组,并给每个元素赋值为1。
为了生成一个n维的AxBxCxDx...数组,可以使用以下代码(未经测试):
Array.prototype.fill = function(elem, n) { for(var i=0; i= 0; i--) { x = [].fill(x, dimensions[i]); } return x; }
以上代码定义了一个fill方法和一个generateArray函数。fill方法用于填充数组,generateArray函数用于生成指定维度的数组。
例如,要生成一个2x3x4x5的矩阵,可以使用以下代码:
generateArray(2,3,4,5);
然而,mikez302的解决方案更好。不过,以上方法可以让您创建一个AxBxCxD的矩阵。
在JavaScript中定义和初始化多维数组一行代码是否可行?这个问题的出现是因为在JavaScript中定义和初始化多维数组的语法相对复杂,不够直观,需要使用循环来实现。下面介绍了两种解决方法。
第一种方法是使用字面量语法,但是这种方法非常冗长和繁琐。可以尝试以下代码:
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]; }
感谢!顺便说一句,这个问题并不是一个挑战,我需要这个方法来解决组合数学相关的问题,你解救了我的一天:)有趣的是,定义一个数组居然如此不直观...