javascript - 如何在 JavaScript 中实例化多维数组?

标签 javascript arrays indexing

我需要做的是:

var a = [[[]]]; 
a[1][2][3] = "hello!"; // [...[undefined,undefined,undefined,"hello!"]...];
a[1][2][1] = "a"; // [...[undefined,"a",undefined,"hello!"]...]
a[2][3][4] = "new_index" // [...[undefined,"a",undefined,"hello!"]...[undefinedx4, "new_index"]]

就我而言,我不喜欢在指定索引之前实例化数组的大小,并在较大索引需要时增加大小。 由于js对多维数组的支持很弱,因此在javascript中执行此操作的最简单或最干净的方法是什么?

最佳答案

在 JS 中,数组是引用类型,因此创建 ND 数组很棘手。克隆工具会非常方便。因此,您可以执行以下操作;

Array.prototype.clone = function(){
  return this.map(e => Array.isArray(e) ? e.clone() : e);
};
function arrayND(...n){
  return n.reduceRight((p,c) => c = (new Array(c)).fill().map(e => Array.isArray(p) ? p.clone() : p ));
}

var arr = arrayND (2,3,4,"x")
console.log(JSON.stringify(arr));

初始参数定义尺寸,最后一个参数是填充值。

这应该可以在 ES6 之前兼容的浏览器上正常工作;

Array.prototype.clone = function(){
  return this.map(function(e){
                    return Array.isArray(e) ? e.clone() : e;
                  });
};

function arrayND(){
  var n = Array.prototype.slice.call(arguments);
  return n.reduceRight(function(p,c){
                         return c = Array(c).fill().map(function(e){
                                                          return Array.isArray(p) ? p.clone() : p;
                                                        });
                       });
}

var arr = arrayND (2,3,4,"x");
console.log(JSON.stringify(arr));

关于javascript - 如何在 JavaScript 中实例化多维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43355935/

相关文章:

r - 从数据框中的第一行创建数据框的标题

javascript - Bootstrap 3 - 在给定时刻只显示一个模态

C程序从字符串数组中提取不同的子字符串

arrays - 错误的替换 shell-尝试使用变量作为数组的名称

sql - 索引是否有助于列数多但记录数少的表?

mongodb - 非 ACID RethinkDB 或 MongoDB 如何维护非相等查询的二级索引

javascript - 在 Javascript 中没有自定义函数的情况下进行链接时将数组转换为 Set 的更短方法

javascript - 如何将 cucumber 报告添加到 Cypress

javascript 如何使里程表在窗口大小调整时改变其宽度

java - 创建对象数组时出现 NullPointerException