Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中创建空的2d数组?_Javascript - Fatal编程技术网

如何在javascript中创建空的2d数组?

如何在javascript中创建空的2d数组?,javascript,Javascript,如何在Javascript中创建一个空的2D数组(不知道新数组中将有多少行或列) 如果它是一个简单数组var newArray=newArray()我可以分配任意数量的元素。但是2D阵列呢?我可以在不指定行数和列数的情况下创建一个吗?然后如何访问元素(myArray[0][1]或myArray[0,1])?Javascript中没有二维数组 要实现二维数组的效果,可以使用数组数组,也称为锯齿数组(因为内部数组可以具有不同的长度) 创建空锯齿阵列与创建任何其他空阵列一样: var myArray

如何在Javascript中创建一个空的2D数组(不知道新数组中将有多少行或列)


如果它是一个简单数组
var newArray=newArray()我可以分配任意数量的元素。但是2D阵列呢?我可以在不指定行数和列数的情况下创建一个吗?然后如何访问元素(
myArray[0][1]
myArray[0,1]
)?

Javascript中没有二维数组

要实现二维数组的效果,可以使用数组数组,也称为锯齿数组(因为内部数组可以具有不同的长度)

创建空锯齿阵列与创建任何其他空阵列一样:

var myArray = new Array();
还可以使用空数组文字:

var myArray = [];
要将任何项放入锯齿数组,首先必须将内部数组放入其中,例如:

myArray.push([]);
myArray[0][0] = 'hello';
var myGrid = [...Array(6)].map(e => Array(6));
var 2darray = new Array(100).fill(null).map(()=>new Array(100).fill(null));
您还可以从一开始创建包含多个空数组的数组:

var myArray = [[],[],[]];
这将提供一个没有任何项的锯齿状数组,但它由三个内部数组组成


由于它是一个数组数组,您可以使用
myArray[0][1]

访问项目。是的,您可以创建一个空数组,然后将数据推入其中。无需在JavaScript中首先定义长度。
请查看

定义:

var arr = [[],[]];
推送数据:

arr[0][2] = 'Hi Mr.A';
arr[1][3] = 'Hi Mr.B';
读取数据:

alert(arr[0][2]);
alert(arr[1][3]);

更新 以下是推荐的视频:

您可以创建一个6 x 6的空数组,如下所示:

myArray.push([]);
myArray[0][0] = 'hello';
var myGrid = [...Array(6)].map(e => Array(6));
var 2darray = new Array(100).fill(null).map(()=>new Array(100).fill(null));
  • Array(6)
    生成一个长度为6且充满
    未定义值的数组
  • 我们将该数组映射到另一个充满
    未定义值的数组
  • 最后,我们得到了一个6x6网格,其中充满了
    未定义的位置
如果需要使用默认值初始化网格:

var value = 'foo'; // by default
var myGrid = [...Array(6)].map(e => Array(6).fill(value));
现在,您有了一个6 x 6的网格,其中充满了
'foo'

两件事:

1) 如果在变量myArray=[],[]]之后调用,则array length属性将不正确地报告数组长度;陈述从技术上讲,由于定义了空数组,因此它们由length属性计数,但在length属性的精神下,它实际上应该返回0,因为没有向任何数组添加非空元素

最小的解决方法是使用两个嵌套的for(in)循环,一个用于第一个数组,一个用于第二个数组,并对未定义的元素进行计数

2) 扩展Siamak A.Motlagh示例并添加arr([2][4])='Hi Mr.C';分配失败,出现“未捕获的TypeError:无法设置未定义的属性“4”错误

请参阅JSFIDLE:

以下是该代码的副本:

var arr = [[],[]];

alert( arr.length );  // wrong!

var c = 0;
for( var i in arr )
  for( var j in arr[ i ] )
    if( arr[ i ][ j ] != undefined )
      ++c;
alert( c );  // correct

arr[0][2] = 'Hi Mr.A';
alert(arr[0][2]);

arr[1][3] = 'Hi Mr.B';
alert(arr[1][3]);

arr[2][4] = 'Hi Mr.C';  // At this point I'm getting VM558:62 Uncaught TypeError: Cannot set property '4' of undefined
alert(arr[2][4]);

var c = 0;
for( var i in arr )
  for( var j in arr[ i ] )
    if( arr[ i ][ j ] != undefined )
      ++c;
alert( c );

为什么第三次作业失败了?[[],[]]创建语句告诉它第一个数组对0和1有效,但对2无效,或者2和3对第二个数组有效,但对4无效

最重要的是,如何在一个数组中定义一个数组,该数组可以在第一个和第二个数组中保存日期对象。我正在使用jQueryUIDatePicker,它需要一个日期数组,就像在date对象中一样,我已经扩展到使用第二个日期数组来包含包含时间的日期对象,这样我就可以跟踪多个日期以及每天多次


谢谢。

如果您想制作一个100x100的2d阵列(即矩阵),您可以在一行中完成,如下所示:

myArray.push([]);
myArray[0][0] = 'hello';
var myGrid = [...Array(6)].map(e => Array(6));
var 2darray = new Array(100).fill(null).map(()=>new Array(100).fill(null));
这将创建一个100x100的空矩阵。
将100x100替换为所需的任何尺寸,将空值替换为首选的默认值,或将未定义值替换为空。

这也可用作表达式:

var twoDarr= new Array(desiredLength);
for (i=0;i<twoDarr.length;i++) {twoDarr[i]=[];} 
var twodar=新数组(所需长度);
对于(i=0;i我使用的函数

function get_empty_2d_array(numRows, numColumnns) {
  return [...Array(numRows)].map(e => Array(numColumnns));
}

function get_2d_array_filled(numRows, numColumnns, fillValue) {
  return [...Array(numRows)].map(e => Array(numColumnns).fill(fillValue));
}

重复:和更多我假设
var row_major=Array(height).map(function(){return Array(width);})
可以做到,但今天终于需要一个2D数组,结果发现它没有。该死。那么我们如何定义它呢
new Array()
?@meks像这样:
new Array([])
,查看演示。答案解决了您的问题吗?有关数组的动态填充,请参阅下面Guffa的答案。不完全是…不。这只起作用,因为第一个索引会增加每个赋值。如果您尝试arr[7][7]=“Hi Mr.C”,则会得到一个“cannot set property”ErrorThank这是一个非常有用的二维数组概念。这里被低估的技巧^^^对任意二维数组非常有效。这里它是可重用的形式:
const create2dArray=(行,列)=>[…array(rows.keys()].map(i=>array(columns))
进一步的解释会很好;)使用
[…array(6)]有什么意义
而不仅仅是
数组(6)
?@nog642您不能迭代
数组(6)
的结果数组,因为它没有元素,但是
[…数组(6)]
的结果数组包含6个未定义的元素,您可以迭代/映射它们,您不需要map函数中的
e
。可以使用空括号:
.map(()=>Array(6).fill(value)
所有内部数组都将具有相同的引用。更改一个内部数组将更改所有其他内部数组。在大多数情况下,这不是所需的行为。欢迎使用堆栈溢出。没有任何解释的代码转储很少有帮助。堆栈溢出是为了学习,而不是提供片段来盲目复制和粘贴。请您的管理员确认stion并解释它如何比OP提供的更好地工作。请参阅。为什么第三个赋值失败?关于[[],[]创建语句,它告诉它第一个数组对0和1有效,但对2无效,或者2和3对第二个数组有效,但对4无效?这是我的噩梦。