在Javascript中声明一个空的二维数组?

在Javascript中声明一个空的二维数组?,javascript,arrays,dynamic,2d,push,Javascript,Arrays,Dynamic,2d,Push,我想在Javascript中创建一个二维数组,在其中存储坐标(x,y)。我还不知道有多少对坐标,因为它们将由用户输入动态生成 预定义二维阵列的示例: var Arr=[[1,2],[3,4],[5,6]]; 我想我可以使用PUSH方法在数组末尾添加一条新记录 如何声明一个空的二维数组,以便在使用我的第一个Arr.push()时,它将被添加到索引0中,并且push写入的每一条记录都将采用下一个索引 这可能很容易做到,我只是一个JS新手,如果有人能编写一个简短的工作代码片段供我检查,我将不胜感激。

我想在Javascript中创建一个二维数组,在其中存储坐标(x,y)。我还不知道有多少对坐标,因为它们将由用户输入动态生成

预定义二维阵列的示例:

var Arr=[[1,2],[3,4],[5,6]];
我想我可以使用PUSH方法在数组末尾添加一条新记录

如何声明一个空的二维数组,以便在使用我的第一个Arr.push()时,它将被添加到索引0中,并且push写入的每一条记录都将采用下一个索引


这可能很容易做到,我只是一个JS新手,如果有人能编写一个简短的工作代码片段供我检查,我将不胜感激。谢谢

您可以尝试以下方法:-

var arr = new Array([]);
推送数据:

arr[0][0] = 'abc xyz';

空数组是通过省略值来定义的,如下所示:

v=[[],[]]
a=[]
b=[1,2]
a.push(b)
b==a[0]

可以使用速记语法将一个数组嵌套到另一个数组中:

   var twoDee = [[]];

您可以这样声明一个正则数组:

var arry = [];
然后,当您有一对值要添加到数组中时,只需执行以下操作:

arry.push([value_1, value2]);
是的,第一次调用
arry.push
,这对值将被放置在索引0处

从nodejs repl:

> var arry = [];
undefined
> arry.push([1,2]);
1
> arry
[ [ 1, 2 ] ]
> arry.push([2,3]);
2
> arry
[ [ 1, 2 ], [ 2, 3 ] ]
当然,由于javascript是动态类型化的,因此不会有类型检查器强制要求数组保持二维。您必须确保只添加坐标对,而不执行以下操作:

> arry.push(100);
3
> arry
[ [ 1, 2 ],
  [ 2, 3 ],
  100 ]

如果你想像这样访问矩阵 矩阵[i][j]

我发现在循环中初始化它最方便

var matrix = [],
    cols = 3;

//init the grid matrix
for ( var i = 0; i < cols; i++ ) {
    matrix[i] = []; 
}
var矩阵=[],
cols=3;
//初始化网格矩阵
对于(变量i=0;i
这会给你 [[],[],[]

所以 矩阵[0][0] 矩阵[1][0]
返回undefined,而不是错误“Uncaught TypeError:无法设置undefined的属性“0”

我们通常知道列数,但可能不知道行数(记录)。这里是我的解决方案的一个例子,它利用了上面的大部分内容。(对于这里比我更有JS经验的人——几乎每个人——欢迎提出任何代码改进建议)

你怎么了

var arr2 = new Array(10,20);
    arr2[0,0] = 5;
    arr2[0,1] = 2
    console.log("sum is   " + (arr2[0,0] +  arr2[0,1]))

应读出“总和为7”

您可以使用函数用数组填充数组:


如果要在创建过程中进行初始化,可以使用和

5是行数,4是列数。

ES6 矩阵
m
大小为3行5列(删除
。填充(0)
以不以零初始化)

let Array2D=(r,c)=>[…数组(r)].map(x=>数组(c).fill(0));
设m=Array2D(3,5);
m[1][0]=2;//第二行,第一列
m[2][4]=8;//最后一行,最后一列
//打印格式化数组
console.log(JSON.stringify(m)
.replace(/(\[\[)(.*)(\]\])/g,[\n[$2]\n]')。replace(/),/g,'],\n')

);创建一个对象并将该对象推入数组

const grid = Array.from(Array(3), e => Array(4));
var jSONdataHolder=功能(国家、纬度、伦敦){
这个国家=国家;
this.lat=lat;
this.lon=lon;
}
var jSONholderArr=[];
jSONholderArr.push(新的jSONdataHolder(“瑞典”、“60”、“17”));
jSONholderArr.push(新的jSONdataHolder(“葡萄牙”、“38”、“9”));
jSONholderArr.push(新的jSONdataHolder(“巴西”、“23”、“46”));
var nObj=jSONholderArr.length;
对于(变量i=0;i
如果我们不使用ES2015,也没有fill(),只需使用
.apply()

let Array2D=(r,c,fill)=>Array.apply(null,新数组(r)).map(function(){return Array.apply(null,新数组(c)).map(function(){return fill})
log(JSON.stringify(Array2D(3,4,0));
log(JSON.stringify(Array2D(4,5,1))//用于3 x 5阵列

var grid2 = Array.from(Array(3), e => {
  console.log(e); // undefined
  return Array(4); // a new Array.
});
Array.from(arrayLike,mapfn)

调用
mapfn
,传递值
undefined
,返回
新数组(4)

创建迭代器并重复调用
next
值。从
next
next()返回的值。值
未定义。然后将该值
undefined
,传递给新创建的数组的迭代器。每个迭代的
都是
未定义的
,如果您记录它,您可以看到它

var x = 3, y = 4;

var ar = new Array(x).fill(new Array(y).fill(0));

没必要这么麻烦!很简单

这将创建2*3的字符串矩阵

var数组=[];
变量x=2,y=3;
var s=‘abcdefg’;
对于(var i=0;i
var arr=[];
var行=3;
var列=2;
对于(变量i=0;iconsole.log(arr);
我知道这是一个旧线程,但我建议使用
对象数组
而不是
数组
。我认为这使代码更易于理解和更新

//使用有意义的变量名,如“points”,
//有什么比一个糟糕的海盗笑话更好的吗!
var点=[];
//创建一个对象文字,然后将其添加到数组中
变量点={x:0,y:0};
点。推(点);
//在1行中创建对象并将其添加到数组中
点推({x:5,y:5});
//从局部变量创建对象
var x=10;
变量y=8;
点推({x,y});
//也向用户询问一个要点
var响应=提示(“请输入坐标点。示例:3,8”);
var coords=response.split(“,”).map(数字);
push({x:coords[0],y:coords[1]});
//显示结果
var canvas=document.getEle

Array(11)
0:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
1:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
2:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
3:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
4:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
5:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
6:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
7:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
8:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
9:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
10:(12)[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
const matrix = new Array(5).fill(0).map(() => new Array(4).fill(0));
[...Array(3)].map(x=>Array(5).fill(0))       
 var jSONdataHolder = function(country, lat, lon) {

    this.country = country;
    this.lat = lat;
    this.lon = lon;
}

var jSONholderArr = [];

jSONholderArr.push(new jSONdataHolder("Sweden", "60", "17"));
jSONholderArr.push(new jSONdataHolder("Portugal", "38", "9"));
jSONholderArr.push(new jSONdataHolder("Brazil", "23", "-46"));

var nObj = jSONholderArr.length;
for (var i = 0; i < nObj; i++) {
   console.log(jSONholderArr[i].country + "; " + jSONholderArr[i].lat + "; " + 
   jSONholderArr[i].lon);

}
new Array(3).fill(new Array(5).fill(0))
const grid = Array.from(Array(3), e => Array(4));
var grid2 = Array.from(Array(3), e => {
  console.log(e); // undefined
  return Array(4); // a new Array.
});
var array=[];
var x = 2, y = 3;
var s = 'abcdefg';

for(var i = 0; i<x; i++){
    array[i]=new Array();
      for(var j = 0; j<y; j++){
         array[i].push(s.charAt(counter++));
        }
    }
var x = 3, y = 4;

var ar = new Array(x).fill(new Array(y).fill(0));