【问题标题】:Constructor for two dimensional array [duplicate]二维数组的构造函数
【发布时间】:2013-07-22 22:56:32
【问题描述】:

我不使用添加库,所以我正在寻找的是一个纯 JavaScript 解决方案。

这不是提供的线程的副本。我希望这个线程打开,因为锁定它的人没有完全阅读我正在寻找的内容。提供一些微不足道的函数来初始化密集数组不是我所追求的。阅读我写的内容。

我正在寻找一个构造函数,而不是某个在已知维度的数组上运行的函数。我正在寻找在触摸多维数组时“刚刚发生”的东西,并且必须是一个诚实的构造函数,在“背景”中运行以按需创建数组元素而无需任何努力程序员在“前台”。

如果我错了,请纠正我,但是在使用二维数组时,必须先初始化第二维,然后再尝试使用它。

应该是这样的:

myArray[123] = [];
myArray[123][456] = 'Hi';

有没有办法创建一个构造函数来自动执行额外的初始化,而不会破坏一维数组的现有功能?

或者,有没有一种方法可以创建一个新的 2DArray 对象,它会自动允许一个人使用两个维度而无需准备工作?

当应用程序不知道下标可能是什么时,这个问题就会出现问题。

【问题讨论】:

  • @zerkms:不,他不创造物品。他只将 .length 设置为 124 并创建 one 属性。
  • @zerkms: §15.4.5.1 如果你愿意 :-) 在网上搜索“sparse array”。
  • @Bergi:没有找到“稀疏数组”:-S
  • @Bergi:无论如何,我的观点是 - 拥有[undefined x 123, 'Hi'] 看起来不是一个好的数组使用 PS:特别感谢 15.4.5.1
  • @zerkms - 引擎将创建一个项目并将长度设置为 124,我相信每个浏览器都会这样做,而不会在数组中创建 123 个未定义的项目,所以它是否在 ECMA 规范中与您的评论错误无关 -> jsfiddle.net/DCAaK

标签: javascript constructor


【解决方案1】:

看到那个问题:Is there a more concise way to initialize empty multidimensional arrays?

解决方案:

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(100,100); 给出一个大小为 100x100 的二维数组

【讨论】:

  • 这是一个简单的函数,不是构造函数。必须有目的地执行以实现其目标,并且需要事先了解维度。构造函数在后台运行,可以说,在前台程序员不费力地处理额外的维度,并且在任何时候使用新的下标时都会完成它的工作,从而提供工作的额外好处当维度的限制未知时。
  • 只要使用新的下标就可以完成它的工作”——我从未见过这样的构造函数;没有语言。没有proxies 在 Javascript 中是完全不可能的
猜你喜欢
  • 2023-04-08
  • 1970-01-01
  • 2017-08-27
  • 1970-01-01
  • 2015-02-21
  • 1970-01-01
  • 2021-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多