首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript 4D数组

Javascript 4D数组
EN

Stack Overflow用户
提问于 2011-05-19 10:22:41
回答 8查看 6.7K关注 0票数 3

有谁有一个函数来创建4D数组(或任何数量的维数)?

我想调用这个函数,然后我就可以做类似于arr[3][2][23][12] = "awesome";的事情了

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-05-19 10:29:35

代码语言:javascript
复制
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);

更新:您可以在第一个参数中指定标高的深度,以及在第二个参数中指定标高的数量。例如:

代码语言:javascript
复制
var myMultiArray = make(64, 4);

这将允许您以这种格式设置和获取:

代码语言:javascript
复制
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可以是任何值。

算法也进行了优化,再试一次。

票数 7
EN

Stack Overflow用户

发布于 2011-05-19 10:30:19

快速和肮脏:

代码语言:javascript
复制
var arr = [[[[[]]]]];

请查看http://jsfiddle.net/MJg9Y/

注意:你仍然需要初始化每个维度。上面的代码为arr[0]中的4维数组奠定了基础。

票数 5
EN

Stack Overflow用户

发布于 2011-05-19 11:09:25

这是一个简单的递归解决方案。真正的大脑是mdim函数。如果深度不是1,它就会调用自己,当它到达深度时,只会返回一个空数组。

因为您可能想要将它用于很多事情,所以我将它包装在Array的一个原型中,以便您可以在您的阵列上自动使用它(便利性/可维护性权衡)。如果您愿意,从闭包中抓取mdim函数,它应该可以很好地工作。

最后有一个简单的测试用例,您可以看到如何使用它。祝你好运!:)

代码语言:javascript
复制
//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);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6053108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档