我一直在尝试找到一种相当简洁的方法来设置空的多维JavaScript数组的维数,但到目前为止还没有成功。
首先,我尝试使用var theArray = new Array(10, 10 10)
初始化一个10x10x10的空数组,但是它只创建了一个包含3个元素的一维数组。
我已经知道如何使用嵌套的for循环来初始化一个空的10x10x10数组,但是以这种方式编写数组初始化器是非常繁琐的。使用嵌套的for循环初始化多维数组可能非常乏味:有没有一种更简洁的方法来设置JavaScript中的空多维数组的维数(具有任意多个维数)?
//Initializing an empty 10x10x10 array:
var theArray = new Array();
for(var a = 0; a < 10; a++){
theArray[a] = new Array();
for(var b = 0; b < 10; b++){
theArray[a][b] = new Array();
for(var c = 0; c < 10; c++){
theArray[a][b][c] = 10
}
}
}
console.log(JSON.stringify(theArray));
发布于 2013-07-22 03:57:35
改编自this answer
function createArray(length) {
var arr = new Array(length || 0),
i = length;
if (arguments.length > 1) {
var args = Array.prototype.slice.call(arguments, 1);
while(i--) arr[i] = createArray.apply(this, args);
}
return arr;
}
只需使用参数调用每个维度的长度。使用示例:
var multiArray = createArray(10,10,10);
给出了一个相等的3维数组length.var weirdArray = createArray(34,6,42,2);
给出了一个长度不等的4维数组。发布于 2013-07-22 04:00:42
function multiDimArrayInit(dimensions, leafValue) {
if (!dimensions.length) {
return leafValue;
}
var arr = [];
var subDimensions = dimensions.slice(1);
for (var i = 0; i < dimensions[0]; i++) {
arr.push(multiDimArrayInit(subDimensions, leafValue));
}
return arr;
}
console.log(multiDimArrayInit([2,8], "hi")); // counting the nested "hi"'s yields 16 of them
演示http://jsfiddle.net/WPrs3/
发布于 2013-07-22 03:58:51
下面是我对这个问题的看法:nArray
实用函数
function nArray() {
var arr = new Array();
var args = Array.prototype.slice.call(arguments, 1);
for(var i=0;i<arguments[0];i++) {
arr[i] = (arguments.length > 1 && nArray.apply(this, args)) || undefined;
}
return arr;
}
使用示例:
var arr = nArray(3, 3, 3);
导致未定义值的3x3x3
数组。
运行带有一些测试的代码,也可以在这里找到:http://jsfiddle.net/EqT3r/7/
https://stackoverflow.com/questions/17776149
复制相似问题