首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有更简洁的方法来初始化空的多维数组?

有没有更简洁的方法来初始化空的多维数组?
EN

Stack Overflow用户
提问于 2013-07-22 03:41:44
回答 6查看 1.8K关注 0票数 14

我一直在尝试找到一种相当简洁的方法来设置空的多维JavaScript数组的维数,但到目前为止还没有成功。

首先,我尝试使用var theArray = new Array(10, 10 10)初始化一个10x10x10的空数组,但是它只创建了一个包含3个元素的一维数组。

我已经知道如何使用嵌套的for循环来初始化一个空的10x10x10数组,但是以这种方式编写数组初始化器是非常繁琐的。使用嵌套的for循环初始化多维数组可能非常乏味:有没有一种更简洁的方法来设置JavaScript中的空多维数组的维数(具有任意多个维数)?

代码语言: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));
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-07-22 03:57:35

改编自this answer

代码语言:javascript
运行
复制
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维数组。
票数 6
EN

Stack Overflow用户

发布于 2013-07-22 04:00:42

代码语言:javascript
运行
复制
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/

票数 3
EN

Stack Overflow用户

发布于 2013-07-22 03:58:51

下面是我对这个问题的看法:nArray实用函数

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

使用示例:

代码语言:javascript
运行
复制
var arr = nArray(3, 3, 3);

导致未定义值的3x3x3数组。

运行带有一些测试的代码,也可以在这里找到:http://jsfiddle.net/EqT3r/7/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17776149

复制
相关文章

相似问题

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