我一直在网上阅读,一些地方说这是不可能的,一些地方说这是可能的,然后给出一个例子,另一些地方反驳这个例子,等等。
如何在JavaScript中声明一个2维数组?(假设这是可能的) 我如何访问它的成员?(myArray[0][1] or myArray[0,1]?)
我一直在网上阅读,一些地方说这是不可能的,一些地方说这是可能的,然后给出一个例子,另一些地方反驳这个例子,等等。
如何在JavaScript中声明一个2维数组?(假设这是可能的) 我如何访问它的成员?(myArray[0][1] or myArray[0,1]?)
当前回答
创建一个非稀疏的“2D”数组(x,y),所有的索引都是可寻址的,并且值设置为空:
let 2Darray = new Array(x).fill(null).map(item =>(new Array(y).fill(null)))
“3D”数组(x,y,z)
let 3Darray = new Array(x).fill(null).map(item=>(new Array(y).fill(null)).map(item=>Array(z).fill(null)))
关于这个问题的变化和更正已经在评论中提到,并在不同的地方回应了这个问题,但不是一个实际的答案,所以我在这里添加了它。
应该注意的是(类似于大多数其他答案),这有O(x*y)时间复杂度,所以它可能不适合非常大的数组。
其他回答
最明智的答案似乎是
var nrows = ~~(随机数学)* 10); var ncols = ~~(随机数学)* 10); 游戏机。log (rows:美元(nrows)); 游戏机。log(离职:美元(ncols)); var矩阵=新阵列(nrows)。地图(row =>新阵列(ncols).fill(0)); 游戏机。log(《黑客帝国》);
请注意,我们不能直接填充行,因为填充使用浅复制构造函数,因此所有行将共享相同的内存…下面是演示如何共享每一行的示例(取自其他答案):
// DON'T do this: each row in arr, is shared
var arr = Array(2).fill(Array(4));
arr[0][0] = 'foo'; // also modifies arr[1][0]
console.info(arr);
一行代码创建一个m*n的二维数组,数组中填充0。
new Array(m).fill(new Array(n).fill(0));
在一些注释中提到了这一点,但是使用array .fill()将有助于构造一个2-d数组:
function create2dArr(x,y) {
var arr = [];
for(var i = 0; i < y; i++) {
arr.push(Array(x).fill(0));
}
return arr;
}
这将在返回的数组中生成一个长度为x, y的数组。
我必须使一个灵活的数组函数添加“记录”到它,因为我需要,并能够更新它们,做任何计算e需要在我把它发送到数据库进行进一步处理。下面是代码,希望能有所帮助:)。
function Add2List(clmn1, clmn2, clmn3) {
aColumns.push(clmn1,clmn2,clmn3); // Creates array with "record"
aLine.splice(aPos, 0,aColumns); // Inserts new "record" at position aPos in main array
aColumns = []; // Resets temporary array
aPos++ // Increments position not to overlap previous "records"
}
请随意优化和/或指出任何错误:)
最简单的方法:
var arr = [];
var arr1 = ['00','01'];
var arr2 = ['10','11'];
var arr3 = ['20','21'];
arr.push(arr1);
arr.push(arr2);
arr.push(arr3);
alert(arr[0][1]); // '01'
alert(arr[1][1]); // '11'
alert(arr[2][0]); // '20'