有谁有一个函数来创建4D数组(或任何数量的维数)?
我想调用这个函数,然后我就可以做类似于arr[3][2][23][12] = "awesome";的事情了
发布于 2011-05-19 10:29:35
function make(dim, lvl, arr) {
if (lvl === 1) return [];
if (!lvl) lvl = dim;
if (!arr) arr = [];
for (var i = 0, l = dim; i < l; i += 1) {
arr[i] = make(dim, lvl - 1, arr[i]);
}
return arr;
}
var myMultiArray = make(4);更新:您可以在第一个参数中指定标高的深度,以及在第二个参数中指定标高的数量。例如:
var myMultiArray = make(64, 4);这将允许您以这种格式设置和获取:
myMultiArray[X][X][X][X] = ....但X必须始终小于64。例如,您不能设置myMultiArray[X][70][X][X],因为尚未定义myMultiArray[X][70]
注意-运行make(64, 4)非常慢-您正在创建64^4个空数组元素(即16,777,216)。
更新2:您可以将最后一个值作为任何数字或字符串。即。myMultiArray[X][X][X][Y],其中X< 64,Y可以是任何值。
算法也进行了优化,再试一次。
发布于 2011-05-19 10:30:19
快速和肮脏:
var arr = [[[[[]]]]];请查看http://jsfiddle.net/MJg9Y/
注意:你仍然需要初始化每个维度。上面的代码为arr[0]中的4维数组奠定了基础。
发布于 2011-05-19 11:09:25
这是一个简单的递归解决方案。真正的大脑是mdim函数。如果深度不是1,它就会调用自己,当它到达深度时,只会返回一个空数组。
因为您可能想要将它用于很多事情,所以我将它包装在Array的一个原型中,以便您可以在您的阵列上自动使用它(便利性/可维护性权衡)。如果您愿意,从闭包中抓取mdim函数,它应该可以很好地工作。
最后有一个简单的测试用例,您可以看到如何使用它。祝你好运!:)
//adds a multidimensional array of specified depth to a given array
//I prototyped it off of array for convenience, but you could take
//just the mdim function
Array.prototype.pushDeepArr = function( depth ){
var arr = (mdim = function( depth ){
if( depth-- > 1 ){
return [ mdim( depth ) ];
} else {
return [];
}
})(depth);
this.push(arr);
};
//example: create an array, add two multidimensional arrays
//one of depth 1 and one of depth 5
x = [];
x.pushDeepArr(1);
x.pushDeepArr(5);https://stackoverflow.com/questions/6053108
复制相似问题